Markers: remove channel name from trace_mark()
[ust.git] / tests / fork / fork.c
index 20a08779f367cc413d2da769c0b25853797f90ec..3b84644325948310ed29a6f22f8ca7751185c5d1 100644 (file)
@@ -1,17 +1,41 @@
+/* Copyright (C) 2009  Pierre-Marc Fournier
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+ */
+
 #include <stdio.h>
 #include <unistd.h>
+#include <sys/types.h>
+#include <stdlib.h>
 
-#include "marker.h"
-
+#include <ust/marker.h>
 
-int main()
+int main(int argc, char **argv, char *env[])
 {
        int result;
 
-       printf("Fork test program\n");
-       trace_mark(ust, before_fork, MARK_NOARGS);
+       if(argc < 2 ) {
+               fprintf(stderr, "usage: fork PROG_TO_EXEC\n");
+               exit(1);
+       }
 
-       sleep(5);
+       printf("Fork test program, parent pid is %d\n", getpid());
+       trace_mark(before_fork, MARK_NOARGS);
+
+       /* Sleep here to make sure the consumer is initialized before we fork */
+       sleep(1);
 
        result = fork();
        if(result == -1) {
@@ -19,13 +43,25 @@ int main()
                return 1;
        }
        if(result == 0) {
-               trace_mark(ust, after_fork_child, MARK_NOARGS);
+               char *args[] = {"fork2", NULL};
+
+               printf("Child pid is %d\n", getpid());
+
+               trace_mark(after_fork_child, MARK_NOARGS);
+
+               trace_mark(before_exec, "pid %d", getpid());
+
+               result = execve(argv[1], args, env);
+               if(result == -1) {
+                       perror("execve");
+                       return 1;
+               }
+
+               trace_mark(after_exec, "pid %d", getpid());
        }
        else {
-               trace_mark(ust, after_fork_parent, MARK_NOARGS);
+               trace_mark(after_fork_parent, MARK_NOARGS);
        }
 
        return 0;
 }
-
-MARKER_LIB;
This page took 0.022776 seconds and 4 git commands to generate.