我有一個由shell啓動並由shell終止的應用程序。現在在我的應用程序中,我創建了一個fork來減少我的應用程序的負載,所以目前有兩個進程使用不同的PID運行在相同的名稱上。現在我想終止我的程序,並且如果我在shell中使用我的進程的PID殺死它,它只會殺死父進程,使其成爲殭屍進程,並且子進程仍然存在。那麼如何通過shell殺死子進程和父進程呢?如何通過shell殺死父進程?
1
A
回答
2
查看命令killall
。
+0
如果我能夠在終端使用kill -9 processname但我不能在shell或在我的應用程序中使用,因爲我的應用程序我有一個孩子進程該子進程有另一個子進程,所以我想殺死我的應用程序中的第二個子進程,並殺死第一個子進程,或者殺死父進程,如果有可能像這樣殺死 – 2012-04-10 13:14:06
2
做ps -el
你會得到以下
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
得到pid
和你的過程ppid
做pkill -P <parent_pid_name>
這意味着你的父進程ID已經催生了兒童和隨後kill <signal number> <pid>
在這種情況下,也代替pid
你必須給出產生所有孩子的父進程ID。
1
您的父進程應該在退出之前捕獲SIGTERM並殺死它的子進程。
我用C
int child;
void sighandler(int sig) {
if (sig == SIGTERM) {
if (child != -1) kill(child, SIGTERM);
}
}
int main() {
int i;
child = -1;
signal(SIGCHLD, SIG_IGN);
signal(SIGTERM, sighandler);
setsid();
setpgid(0,0);
i = fork();
switch(i) {
case -1:
break;
case 0: // child
sleep (100);
break;
default:
child = i;
sleep (100);
break;
}
return 0;
}
寫這個你可以殺死具有相同名稱的所有進程與「killall」命令。
0
pkill命令可以用來殺死進程。也killall
相關問題
- 1. 殺死進程SHELL
- 2. 通過ParentProcessID殺死進程
- 3. 如何通過awk殺死進程?
- 4. 如何通過C#殺死mysql進程
- 5. 如何通過shell腳本殺死linux已停用的進程
- 6. 殺死進程殺死其他進程
- 7. 通過sshj殺死一個進程
- 8. 通過PID在Erlang中殺死進程
- 9. Jenkins通過ssh殺死進程(Tomcat)
- 10. 在Android中從shell中殺死進程
- 11. Shell腳本無法殺死進程
- 12. 如何殺死nohup進程?
- 13. 如何通過編程方式殺死audiodg.exe進程?
- 14. 殺死進程
- 15. 殺死進程
- 16. 殺死進程
- 17. 當父進程被「kill -9」殺死時,子進程是否也會被殺死?
- 18. 如何殺死mac OS上的進程通過ssh到linux
- 19. 如何殺死使用R時通過system()啓動的進程?
- 20. 如何通過WPF ListView殺死Windows進程?
- 21. 如何通過ssh殺死一個進程
- 22. 殺死不會殺死進程
- 23. C#如何殺死父線程
- 24. SIGKILL殺死進程
- 25. Android殺死進程
- 26. VB.NET - 殺死進程
- 27. 殺死進程winword
- 28. 殺死mysqld進程
- 29. Shell腳本。如何殺死Java進程,然後用nohup的
- 30. 如何殺死Node.js中的Python-Shell模塊進程?
我認爲你可以使用一個負PID .... – pragati 2012-04-10 13:51:20