glib/gtester.c:Spawn a process async and quit gtester after the child process exited
authorTim Janik <timj@src.gnome.org>
Tue, 20 Nov 2007 15:00:34 +0000 (15:00 +0000)
committerTim Janik <timj@src.gnome.org>
Tue, 20 Nov 2007 15:00:34 +0000 (15:00 +0000)
svn path=/trunk/; revision=5888

glib/gtester.c

index ab5ec665ea080af698be0d8df24334ffd440fd97..03c1d80f4ca5f793fa752ddf25dd7e327368e5d6 100644 (file)
  * USA
  */
 
+#include <glib.h>
+
+static void
+child_watch_cb (GPid     pid,
+               gint     status,
+               gpointer data)
+{
+       GMainLoop* loop = data;
+
+       g_main_loop_quit (loop);
+}
+
 int
 main (int   argc,
       char**argv)
 {
-       return 0;
+  GMainLoop* loop;
+  GError   * error = NULL;
+  GPid       pid = 0;
+  gchar    * working_folder;
+  gchar    * child_argv[] = {
+    "cat",
+    "/proc/cpuinfo",
+    NULL
+  };
+
+  working_folder = g_get_current_dir ();
+  g_spawn_async (working_folder,
+                child_argv, NULL /* envp */,
+                G_SPAWN_DO_NOT_REAP_CHILD | G_SPAWN_SEARCH_PATH,
+                NULL, NULL,
+                &pid,
+                &error);
+  g_free (working_folder);
+
+  if (error)
+    {
+      g_error ("Couldn't execute child: %s", error->message);
+      /* doesn't return */
+    }
+
+  loop = g_main_loop_new (NULL, FALSE);
+
+  g_child_watch_add (pid,
+                    child_watch_cb,
+                    loop);
+
+  g_main_loop_run (loop);
+  g_main_loop_unref (loop);
+  return 0;
 }