子进程和父进程执行是并行的,首先取决于OS调度.但是,总是在父母之前开始做孩子可以做些什么呢?
这是我的问题的伪代码,
int start_test()
{
pid_t pid;
pid = fork();
if(pid == 0) {
execv("XXX", XXX);
} else if(pid > 0) {
pid = fork();
if(pid == 0) {
execv("XXX", XXX);
} else {
// Do something
}
}
return 0;
}
int main()
{
start_test();
return 0;
}
我想首先执行execv,然后再次创建新进程.每个execv应该按顺序.
解决方法:
我真的不知道为什么人们一直告诉他们不要依赖这种行为,它实际上在跟踪程序(strace,ldtrace,…)中使用了很多.
首先,分叉您的进程并获取子进程pid,停止该进程并在父进程中恢复它:
pid_t pid = fork();
if (pid == -1)
abort();
else if (pid == 0) {
raise(SIGSTOP); // stop the child
} else {
waitpid(pid, NULL, WUNTRACED); // wait until the child is stopped
kill(pid, SIGCONT); // resume the child
}