如果两个进程正在执行相同的程序,是否可以使用fork而不执行exec?

时间:2016-06-06 04:20:41

标签: c fork exec

这是一个代码示例,其中fork库调用用于创建共享父地址空间的子进程。子进程在不使用exec系统调用的情况下执行其代码。我的问题是:在父进程和子进程都执行相同程序的情况下,是否需要exec系统调用?

  #include <stdio.h>
  int main()
  {
      int count;
      count = fork();
      if (count == 0)
          printf("\nHi I'm child process and count =%d\n", count);
      else
          printf("\nHi I'm parent process and count =%d\n", count);
     return 0;
 }  

2 个答案:

答案 0 :(得分:2)

  

是否可以使用fork而不使用exec

是的,这是可能的。

  

是父进程和子进程正在执行相同程序时不需要的exec系统调用

是的,在这种情况下不需要。

答案 1 :(得分:1)

根据操作系统的不同,此问题的答案可能会有所不同。 OS X上fork的手册页包含这个不祥的警告(粗体部分是原文的解释):

  

您在子进程中可以做的事情是有限的。成为   完全安全,你应该限制自己只执行   async-signal安全操作,直到exec之一为止   调用函数。所有API,包括全局数据符号   fork()之后应该假设框架或库是不安全的   除非明确记录为安全或异步信号安全。如果你   需要在子进程中使用这些框架,你必须执行。在   这种情况执行同一个可执行文件的另一个副本是合理的。

可以在 sigaction(2)的手册页中找到异步信号安全功能列表。