[CRIU] [PATCH 1/2] dump: Show task comm early

Cyrill Gorcunov gorcunov at openvz.org
Thu Jun 30 12:04:44 PDT 2016


When error happens on file dumping stage the only
information about the task we dumping is its PID.
For debug purpose show task's @comm early.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 criu/cr-dump.c | 41 ++++++++++++++++++++++++++++++++++++++---
 1 file changed, 38 insertions(+), 3 deletions(-)

diff --git a/criu/cr-dump.c b/criu/cr-dump.c
index 00d28e9fcccb..3b1038943d90 100644
--- a/criu/cr-dump.c
+++ b/criu/cr-dump.c
@@ -1086,6 +1086,41 @@ err:
 	return ret;
 }
 
+/*
+ * NOTE: Don't run simultaneously, it uses local static buffer!
+ * The only purpose of the helper is to print out task command
+ * for debug purpose when error happens early before task
+ * statistics gathered.
+ */
+static char *task_comm_info(pid_t pid)
+{
+	static char comm[PROC_TASK_COMM_LEN];
+	int ret = 0;
+
+	if (!pr_quelled(LOG_INFO)) {
+		char path[64];
+		int fd;
+
+		snprintf(path, sizeof(path), "/proc/%d/comm", pid);
+		fd = open(path, O_RDONLY);
+		if (fd >= 0) {
+			ssize_t n = read(fd, comm, sizeof(comm));
+			if (n > 0)
+				comm[n-1] = '\0';
+			else
+				ret = -1;
+			close(fd);
+		} else {
+			pr_perror("Can't open %s\n", path);
+			ret = -1;
+		}
+	}
+
+	if (ret && comm[0])
+		comm[0] = '\0';
+	return comm;
+}
+
 static int pre_dump_one_task(struct pstree_item *item, struct list_head *ctls)
 {
 	pid_t pid = item->pid.real;
@@ -1098,7 +1133,7 @@ static int pre_dump_one_task(struct pstree_item *item, struct list_head *ctls)
 	vmas.nr = 0;
 
 	pr_info("========================================\n");
-	pr_info("Pre-dumping task (pid: %d)\n", pid);
+	pr_info("Pre-dumping task (pid: %d comm: %s)\n", pid, task_comm_info(pid));
 	pr_info("========================================\n");
 
 	if (item->pid.state == TASK_STOPPED) {
@@ -1175,7 +1210,7 @@ static int dump_one_task(struct pstree_item *item)
 	vmas.nr = 0;
 
 	pr_info("========================================\n");
-	pr_info("Dumping task (pid: %d)\n", pid);
+	pr_info("Dumping task (pid: %d comm: %s)\n", pid, task_comm_info(pid));
 	pr_info("========================================\n");
 
 	if (item->pid.state == TASK_DEAD)
@@ -1618,7 +1653,7 @@ int cr_dump_tasks(pid_t pid)
 	int ret = -1;
 
 	pr_info("========================================\n");
-	pr_info("Dumping processes (pid: %d)\n", pid);
+	pr_info("Dumping processes (pid: %d comm: %s)\n", pid, task_comm_info(pid));
 	pr_info("========================================\n");
 
 	root_item = alloc_pstree_item();
-- 
2.7.4



More information about the CRIU mailing list