X-Git-Url: https://git.lttng.org/?p=lttng-tools.git;a=blobdiff_plain;f=tests%2Fregression%2Fust%2Ffork%2Ffork.c;fp=tests%2Fregression%2Fust%2Ffork%2Ffork.c;h=744e9203e9dfb65e891d6f518cc7cfe679df01d4;hp=0000000000000000000000000000000000000000;hb=37bd6c8e4c4a3d7054d97627e4fb4bef1d4612a6;hpb=ee28adfb4b4f5a6b24f4d23024ed256af37060c6 diff --git a/tests/regression/ust/fork/fork.c b/tests/regression/ust/fork/fork.c new file mode 100644 index 000000000..744e9203e --- /dev/null +++ b/tests/regression/ust/fork/fork.c @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2009 Pierre-Marc Fournier + * Copyright (C) 2011 Mathieu Desnoyers + * + * 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; version 2.1 of + * the License. + * + * 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 +#include +#include +#include + +#define TRACEPOINT_DEFINE +#define TRACEPOINT_CREATE_PROBES +#include "ust_tests_fork.h" + +int main(int argc, char **argv, char *env[]) +{ + int result; + + if (argc < 2) { + fprintf(stderr, "usage: fork PROG_TO_EXEC\n"); + exit(1); + } + + printf("parent_pid %d\n", getpid()); + tracepoint(ust_tests_fork, before_fork, getpid()); + + result = fork(); + if (result == -1) { + perror("fork"); + return 1; + } + if (result == 0) { + char *args[] = { "fork2", NULL }; + + tracepoint(ust_tests_fork, after_fork_child, getpid()); + + result = execve(argv[1], args, env); + if (result == -1) { + perror("execve"); + return 1; + } + } else { + printf("child_pid %d\n", result); + tracepoint(ust_tests_fork, after_fork_parent, getpid()); + } + + return 0; +}