summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/guestfs-internal.h2
-rw-r--r--src/guestfs.c13
-rw-r--r--src/launch.c17
3 files changed, 26 insertions, 6 deletions
diff --git a/src/guestfs-internal.h b/src/guestfs-internal.h
index 96f81525..e2ffdf30 100644
--- a/src/guestfs-internal.h
+++ b/src/guestfs-internal.h
@@ -170,6 +170,8 @@ struct guestfs_h
int selinux; /* selinux enabled? */
+ int pgroup; /* Create process group for children? */
+
char *last_error;
int last_errnum; /* errno, or 0 if there was no errno */
diff --git a/src/guestfs.c b/src/guestfs.c
index b02bdb9d..e2b71594 100644
--- a/src/guestfs.c
+++ b/src/guestfs.c
@@ -801,6 +801,19 @@ guestfs__get_attach_method (guestfs_h *g)
return ret;
}
+int
+guestfs__set_pgroup (guestfs_h *g, int v)
+{
+ g->pgroup = !!v;
+ return 0;
+}
+
+int
+guestfs__get_pgroup (guestfs_h *g)
+{
+ return g->pgroup;
+}
+
/* Note the private data area is allocated lazily, since the vast
* majority of callers will never use it. This means g->pda is
* likely to be NULL.
diff --git a/src/launch.c b/src/launch.c
index 0b15ce98..1a47363d 100644
--- a/src/launch.c
+++ b/src/launch.c
@@ -643,12 +643,9 @@ launch_appliance (guestfs_h *g)
close (rfd[1]);
}
-#if 0
- /* Set up a new process group, so we can signal this process
- * and all subprocesses (eg. if qemu is really a shell script).
- */
- setpgid (0, 0);
-#endif
+ /* Put qemu in a new process group. */
+ if (g->pgroup)
+ setpgid (0, 0);
setenv ("LC_ALL", "C", 1);
@@ -677,6 +674,14 @@ launch_appliance (guestfs_h *g)
pid_t qemu_pid = g->pid;
pid_t parent_pid = getppid ();
+ /* It would be nice to be able to put this in the same process
+ * group as qemu (ie. setpgid (0, qemu_pid)). However this is
+ * not possible because we don't have any guarantee here that
+ * the qemu process has started yet.
+ */
+ if (g->pgroup)
+ setpgid (0, 0);
+
/* Writing to argv is hideously complicated and error prone. See:
* http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/utils/misc/ps_status.c?rev=1.33.2.1;content-type=text%2Fplain
*/