我是一名正在學習編程並正在創建和關閉進程的學生。我能夠創建這個程序,從Bash獲取參數,argv[1]
是過程將創建的子項的數量。 argv[2]
確定這些孩子中的哪一個創建了另一個孩子。現在我想讓argv[3]
使這個子進程的數量(從argv[1]
)變成殭屍。我還必須以某種方式放置一個「故障安全」,以便孩子在成爲殭屍之前首先處理孫子。創建殭屍進程的煩惱
我已經成功地使前兩個參數有效。
的代碼是:
int main(int argc, char *argv[])
{
int i, antal, grandchild; pid_t pid, pid2;
antal=atoi(argv[1]);
grandchild=atoi(argv[2]);
printf("antal=%d.\n grandchild=%d\n\n", antal,grandchild);
for(i=0; i<antal; i++)
{
pid=fork();
switch(pid)
{
case -1:
fprintf(stderr, "Fork Failed!");
break;
case 0:
printf("Child process: %d.\n", getpid());
sleep(1);
if(i+1==grandchild)
pid2=fork();
if(pid2==0)
{
printf("I am the grandchilde with PID: %d.\n",getpid());
sleep(5);
exit(0);
}
wait(0);
exit(0);
break;
default: printf("Parent process with PID: %d\n", getpid());
wait(0);
break;
}
}
}
我無法理解我怎麼能去這樣做
。我有6個月的課程,所以我沒有廣泛的編程技能。任何關於這個問題的幫助或提示非常感謝。我也非常感謝任何有這方面信息的網站。
也被認爲是讀取最友好的選項控制fork()
返回值?
在此先感謝。
我從未使用過kill()命令。因此,如果我理解正確,通過在子孫產卵的代碼中加入kill(pid,0)!= - 1,它會等待孫子成功退出? –
「成功退出」?我從來沒有聽說過一個不成功的退出;-)但回答你的問題:kill(pid,0)只是檢測到該進程與該pid的存在。如果該進程存在(並且不是殭屍),則返回0;如果進程已終止,則返回-1。所以'kill'用來檢測進程是否仍在運行,'while .. sleep'等待進程不再運行。 –
我試圖添加一段代碼而不是等待()在包含孫子的孩子,它只是讓程序凍結(我認爲它只是成爲一個殭屍)。 –