Shell-Script

殺死其他使用者程序

  • January 18, 2012

在某些使用者環境中,我們必須在某些性能測試期間登錄並殺死在該環境中執行的所有程序。

環境名稱就像rswrk01, … 最多rswrk98. 這就是我們登錄的方式。

sudo su - rswrk96

它不會提示輸入任何密碼並直接登錄。

是否可以自動化腳本來殺死所有環境中的所有正在執行的程序,而不是手動登錄並殺死程序?

順便說一句,我不是 root 使用者。

$ uname -a
HP-UX rcihp145 B.11.23 U 9000/800 3683851961 unlimited-user license

Sorswrk01和 co 是使用者。偶爾有用的kill是,如果您將 -1 作為 PID 傳遞,則信號將發送到信號發送者有權向其發送信號的所有程序。換句話說,對於非 root 使用者,kill -$sig -1將信號發送到以該使用者身份執行的所有程序。這包括殺手,但傳遞是原子的,因此所有相關程序都會收到信號。

現在你所要做的就是把它放在一個循環中,你就完成了。由於使用前導零格式化數字有點麻煩,一個看起來不太好看但方便的技巧是放置一個前導1(即從 101 計數到 198 而不是從 1 到 98)並將其去掉。

i=101
while [ $i -le 98 ]; do
 sudo su - rswrk${i#1} kill -KILL -1
 i=$((i+1))
done

或者在 ksh 中:

for ((i=101; i<=198; i++)); do
 sudo su - rswrk${i#1} kill -KILL -1
done

或者在 bash 或 zsh 中:

for i in {01..98}; do
 sudo su - rswrk$i kill -KILL -1
done

sudo -u rswrk96 -i killall ...應該和做su - rswrk96然後一樣killall ...

剩下的就是生成序列 00-96。這應該有效:

for i in $(seq -w 00 96); do sudo -u rswrk$i -i killall ...; done

現在我想起來了,你可能只是這樣做

for i in $(seq -w 00 96); do sudo killall -u rswrk$i; done

不需要登錄。

引用自:https://unix.stackexchange.com/questions/29290