我正在嘗試編寫一個程序,其中程序通過while循環持續接收用戶輸入,並在每個循環中運行shell腳本時分流當前程序進程的新子。這是我目前有:Waitpid用法和Bash腳本
int main(int argc, char **argv)
{
while(!feof(stdin)){
printf("Port Number:");
fgets(portno, 100, stdin);
input[strlen(portno) - 1] = '\0';
pid_t pid = fork();
if (pid < 0){
die("fork did not work");
} else if (pid == 0){
fprintf(stderr, "[pid=%d] ", (int)getpid());
fprintf(stderr, "process started on port %s\n", portno);
execl("./netcattest.sh", "netcattest.sh", portno, (char *)0);
die("program failed");
} else {
/*
if (waitpid(.... NEED HELP ON THIS PART
*/
fprintf(stderr, "[pid=%d] ", (int)pid);
fprintf(stderr, "program terminated\n");
}
}
return 0;
}
我的問題是閱讀waitpid文檔,我略有不清楚如何使用該函數。我想要發生的事情是,當程序是父進程時,我希望能夠以某種方式識別當前已終止的所有進程。例如,如果我運行循環3次,並在第二個循環之後第一個進程終止,我想以某種方式能夠識別終止的進程的PID。
我知道它涉及到使用WNOHANG選項,但我真的很困惑它是如何工作的。
非常感謝你們。
編輯:另外,有沒有一種快速的方法來做一段代碼的4縮進,而不是單獨隔開每一行?
是的,選擇代碼並點擊「{}」圖標。 –
謝謝Michael! – KWJ2104