使用fork(),如何才能使子进程始终运行?

子进程和父进程执行是并行的,首先取决于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
}
上一篇:fork()和vfork()的区别(转载)


下一篇:fork函数和vfork函数的区别(配合exec系列函数使用)