Я использую forktracker.stp для отслеживания потока процесса fork
. Сценарий таков:Как понять, что pid() и new_pid имеют одинаковое значение при выполнении forktracker.stp?
probe kprocess.create
{
printf("%-25s: %s (%d) created %d\n",
ctime(gettimeofday_s()), execname(), pid(), new_pid)
}
probe kprocess.exec
{
printf("%-25s: %s (%d) is exec'ing %s\n",
ctime(gettimeofday_s()), execname(), pid(), filename)
}
Выполнение сценария, я считаю, он выдает следующие результаты:
......
Thu Oct 22 05:09:42 2015 : virt-manager (8713) created 8713
Thu Oct 22 05:09:42 2015 : virt-manager (8713) created 8713
Thu Oct 22 05:09:42 2015 : virt-manager (8713) created 8713
Thu Oct 22 05:09:43 2015 : virt-manager (8713) created 8713
......
Я не могу понять, почему pid()
и new_pid
имеют одинаковое значение. Я сомневаюсь, что это связано с «fork
звонок один раз, возврат дважды». Итак, я пишу простую программу для тестирования:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main(void)
{
pid_t pid;
pid = fork();
if (pid < 0) {
exit(1);
} else if (pid > 0) {
printf("Parent exits!\n");
exit(0);
}
printf("hello world\n");
return 0;
}
Отслеживая эту программу, скрипт выводит:
Thu Oct 22 05:27:10 2015 : bash (3855) created 8955
Thu Oct 22 05:27:10 2015 : bash (8955) is exec'ing "./test"
Thu Oct 22 05:27:10 2015 : test (8955) created 8956
Так что, похоже, не связанные с «fork
вызова один раз, вернуться в два раза».
Как я могу понять, pid()
и new_pid
- это то же значение?