1
我有以下两个源文件wait4不会阻止父线程
loop.c中该可执行文件的名称是loop
int main() {
while(true);
return 0;
}
和run.c其可执行文件的名称为run
int main() {
pid_t child_pid = fork();
int status;
struct rusage info;
if (child_pid == 0) {
ptrace(PTRACE_TRACEME, 0, NULL, NULL);
execl("loop", "loop", NULL);
exit(0);
}
wait4(child_pid, &status, 0, &info);
puts("Child exited");
printf("%ld\n", info.ru_utime.tv_usec);
return 0;
}
我编译了这两个程序,并且我运行了run
程序。为什么终止?我读过wait4 suspend,但实际上并没有。当我执行ps
程序loop
正在运行,并且run
没有(它不是在ps
和终端似乎完成它的工作通过提供输出)。
我错过了什么吗?
PS
我用GNU G ++编译器,如果它的事宜。
谢谢你的建议,我在无限循环,实际上它运行一次包裹起来wait4我应该使用,而不是wait4的方式我真的?需要知道子线程的执行时间。 – abc
在您的变体中,您可以使用getrusage(RUSAGE_CHILDREN。 – fghj
顺便说一句,你可以找到类似的模式ptrace + waitpid工作程序,但这个程序的作品,在这里:http://habrahabr.ru/post/111266/。这跟踪系统调用。即使你不懂俄语,文章中的C代码也足以让你明白。 – fghj