在我的項目殺人,我需要一個子任務並行與父任務中發揮。我使用fork()來創建一個並行進程,它是aplay xyz.wav
。現在,當我想要從父進程中終止子進程,例如system("kill -9 aplay ")
時,aplay被終止,但是我看到了父任務的兩個實例。我認爲其中一個是通過調用fork()創建的副本,另一個是原始的。隨着每次fork()調用,副本數量都會增加。我意識到內存溢出。我只是想保持原來的過程。我試圖殺死父母的副本,但失敗了!父母程序的副本顯示爲'不存在'。fork()和在Linux
的「defucnt」過程繼續增加,因爲我打電話並行處理,i是否殺死aplay與否。我也嘗試通過其PID來殺死它,但它也沒有工作。
static int
test(Core *pc, char *args)
{
pid1=fork();
if (pid1 ==0)
{
system ("ps ");
system("aplay /opt/Line_Tone_14s.wav");
_exit(0);
}
else if(pid1<0)
{
out("fork() ERROR (-1) returned\n");
}
else if(pid1>0)
{
out("I AM IN PARENT PROCESS() NOW\n");
}
return 1;
}
static int
test1(Core *pc, char *args)
{
system ("ps ");
system ("killall -9 aplay ");
return 1;
}
Initially
> PID TTY TIME CMD
1580 pts/0 00:00:00 sudo
1581 pts/0 00:00:00 su
1589 pts/0 00:00:00 bash
5732 pts/0 00:00:00 parent
5738 pts/0 00:00:00 sh
5739 pts/0 00:00:00 ps
>test
> PID TTY TIME CMD
1580 pts/0 00:00:00 sudo
1581 pts/0 00:00:00 su
1589 pts/0 00:00:00 bash
5732 pts/0 00:00:00 parent
5737 pts/0 00:00:00 parent
5740 pts/0 00:00:00 sh
5741 pts/0 00:00:00 aplay
5743 pts/0 00:00:00 sh
5744 pts/0 00:00:00 ps
>test1
>killed
after kill
>PID TTY TIME CMD
1580 pts/0 00:00:00 sudo
1581 pts/0 00:00:00 su
1589 pts/0 00:00:00 bash
5732 pts/0 00:00:00 parent
5737 pts/0 00:00:00 parent <defunct>
5753 pts/0 00:00:00 sh
5754 pts/0 00:00:00 ps
>test
> PID TTY TIME CMD
1580 pts/0 00:00:00 sudo
1581 pts/0 00:00:00 su
1589 pts/0 00:00:00 bash
5732 pts/0 00:00:00 parent
5737 pts/0 00:00:00 parent <defunct>
5759 pts/0 00:00:00 parent
5762 pts/0 00:00:00 sh
5763 pts/0 00:00:00 aplay
5765 pts/0 00:00:00 sh
5766 pts/0 00:00:00 ps
>test1
>killed
after kill
>PID TTY TIME CMD
1580 pts/0 00:00:00 sudo
1581 pts/0 00:00:00 su
1589 pts/0 00:00:00 bash
5732 pts/0 00:00:00 parent
5737 pts/0 00:00:00 parent <defunct>
5759 pts/0 00:00:00 parent <defunct>
5773 pts/0 00:00:00 sh
5774 pts/0 00:00:00 ps
我還測試()命令與此嘗試
else if(pid1>0)
{
out("I AM IN PARENT PROCESS() NOW\n");
wait(&status);
}
通過這樣做,只有一個父進程保持後aplay完成播放聲音,無論怎樣很多時候我稱之爲「測試」命令。但問題在於,我無法在聲音播放期間輸入任何其他命令,直到完成。所以不能在播放聲音之間殺死它。
我想播放聲音並行,並想殺死任何時候我想要的。
我會用'SIGKILL'而不是'9' ... :-)但無論如何+1,簡單到如此地步。 –
採取的措施@R ..補充說,作爲評論。 – paxdiablo
我們已經試過殺死,sigkill也。 –