我運行了幾個程序,使用fork()
,接着是execve()
來自第三個程序。所有這些程序都是要完成的,但最後第三個程序不會返回,即不顯示命令提示符。爲什麼程序的行爲取決於子程序的順序?
如果我在調用程序中使用wait()
命令,那麼execve
的程序只有在等待語句的順序與execve
程序的結尾順序匹配時纔會返回。爲什麼會這樣?
這裏的簡化代碼:
int main()
{
int child1,child2,status;
char*newargv1[] = {./xyz",NULL};
char *newargv2[] = {./abc",NULL};
if((child1 = fork())==0)
execve(newargv1[0],newargv1,NULL);
if((child2 = fork())==0)
execve(newargv2[0],newargv2,NULL);
while(wait(&status) != child1);
while(wait(&status) != child2);
}
它如果child1完成第一個工作正常。 ./xyz和./abc有一些簡單的處理和控制到最後。
向我們展示代碼。 – cnicutar
@cnicular添加了代碼 –
使用waitpid與非阻塞標誌和輪詢,而不是等待。 – Keith