2012-09-10 45 views
0

以下代码调用一个except脚本,该脚本通过ftp将文件复制到服务器。fork() - parent忽略除脚本外的execv()

int status; 
int child_pnr; 

if((child_pnr = fork())==0) 
{ 
    printf("Childnr %i\n",child_pnr); 
    execv("/home/..../ftptest.exp",NULL); 

} 
else if (child_pnr > 0) 
{ 
    printf("Parent... childnr %i generated\n",child_pnr); 
    sleep(7); 
} 
else 
    perror("fork() error"); 

由于execv()将在执行后终止,我为此函数产生了一个子进程。如果我没有睡眠(7),为什么从父母中断了ftptest.exp ...

+2

只是为了澄清:execv(或任何'exec'函数族)在执行后不会终止。实际上''execv''在被调用的程序中用进程替换了子进程,'execv'永远不会返回(除非执行程序时出错)。 –

回答

2

通过“中断”,我认为你的意思是父母不等待孩子完成操作在做下一步做什么之前?

父母和孩子将在分岔后并行运行。如果你想要父母“挂起”,直到孩子完成,那么你需要为wait

请参阅man wait并在互联网上搜索fork示例。

+0

thnks改变睡眠(7)等待(child_pnr)... – Fendrix