[問題] Debian跟BSD上類似killall5的指令?
我偶爾會在SSH遠端伺服器用到killall5這個指令
(killall5的man page摘要:
killall5 is the SystemV killall command. It sends a signal to all processes
except kernel threads and the processes in its own session, so it won't kill
the shell that is running the script it was called from. Its primary (only)
use is in the rc scripts found in the /etc/init.d directory.)
我用killall5的目的是砍光"top -u `whoami`"顯示的所有process
(使用killall5後同時SSH連線也會斷掉, 不過對我來說沒差)
但killall5這個指令不是每個distro都有(像Debian(wheezy/sid)跟FreeBSD就沒有)
請問該如何用其他指令湊出killall5的功能呢?
我自己亂試了很多種 不過都失敗
例如
killall -u $USER
pkill -u $USER
(...下略十幾種不同的寫法)
基本上"失敗"的原因都是一樣的 說明如下
假設原本"top -u `whoami`"的process pid清單長這樣:
123
456
789
假設123是SSH連線後得到的shell(bash)
456跟789是我想要砍掉的process
此時若使用killall5 則3個process都會被砍掉
(雖然123也被砍掉了導致我SSH斷線
不過沒差 再SSH過去就好了 重點是456跟789一定要砍乾淨)
然而若用我亂湊的"pkill -u $USER"之類的指令
123被砍掉後SSH會斷線 但456跟789還活著(也就是沒有達到我的要求)
也就是說若遇到遠端伺服器沒有killall5的情況
我就只能top -u $USER然後一個process一個process慢慢砍(k pid signal)
(456跟789只是舉例 實際上要砍的process通常都十幾個 打pid會打到手軟)
總結我的問題如下:
a) 如何用其他指令湊出跟killall5相同的功能?
b) 湊出來的指令要可在Linux及FreeBSD使用
歡迎提供任何想法 感激不盡!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.31.155
推
10/12 06:47, , 1F
10/12 06:47, 1F
"kill(all) -9 ..."之類的我試過很多 不過都無效
(不是說SIGNAL不重要啦 只是更重要的應該是指令怎麼寫)
推
10/12 07:18, , 2F
10/12 07:18, 2F
→
10/12 07:18, , 3F
10/12 07:18, 3F
→
10/12 07:20, , 4F
10/12 07:20, 4F
→
10/12 07:21, , 5F
10/12 07:21, 5F
→
10/12 07:21, , 6F
10/12 07:21, 6F
→
10/12 07:22, , 7F
10/12 07:22, 7F
→
10/12 07:22, , 8F
10/12 07:22, 8F
剛試了一下發現有用 不過為什麼呢?
......|xargs kill -9
綠色的部份會產生待砍的pid清單 然後pipe給kill砍
這樣跟我本來的作法極為類似 為什麼我的作法不行 這個卻可以呢
→
10/12 11:41, , 9F
10/12 11:41, 9F
-u接的是username唷(另外, 這個也在我的亂試(無效)清單中)
→
10/12 13:55, , 10F
10/12 13:55, 10F
我是這樣試的沒錯 晚點再拿我亂湊的指令產生的pid清單跟這個pid清單比較看看
→
10/12 18:10, , 11F
10/12 18:10, 11F
→
10/12 18:10, , 12F
10/12 18:10, 12F
→
10/12 18:11, , 13F
10/12 18:11, 13F
恩恩!
→
10/13 22:51, , 14F
10/13 22:51, 14F
喔喔..我path沒有/sbin/ 難怪[ -z `which killall5` ]是True...
※ 編輯: Holocaust123 來自: 140.112.31.155 (10/13 23:27)