这是一个代码示例,其中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;
}
答案 0 :(得分:2)
是否可以使用fork而不使用exec
是的,这是可能的。
是父进程和子进程正在执行相同程序时不需要的exec系统调用
是的,在这种情况下不需要。
答案 1 :(得分:1)
根据操作系统的不同,此问题的答案可能会有所不同。 OS X上fork
的手册页包含这个不祥的警告(粗体部分是原文的解释):
您在子进程中可以做的事情是有限的。成为 完全安全,你应该限制自己只执行 async-signal安全操作,直到exec之一为止 调用函数。所有API,包括全局数据符号 fork()之后应该假设框架或库是不安全的 除非明确记录为安全或异步信号安全。如果你 需要在子进程中使用这些框架,你必须执行。在 这种情况执行同一个可执行文件的另一个副本是合理的。
可以在 sigaction(2)的手册页中找到异步信号安全功能列表。