在某些用户环境中,我们必须在某些性能测试期间登录并终止在该环境中运行的所有进程。
环境名称类似于rswrk01
,... 至rswrk98
。这就是我们登录的方式。
sudo su - rswrk96
它不会提示输入任何密码并直接登录。
是否可以自动编写脚本来终止所有环境中的所有正在运行的进程,而不是手动登录并终止进程?
顺便说一句,我不是 root 用户。
$ uname -a
HP-UX rcihp145 B.11.23 U 9000/800 3683851961 unlimited-user license
答案1
sudo -u rswrk96 -i killall ...
su - rswrk96
应该和doing and then一样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
不需要登录。
答案2
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
答案3
kill -9 -1
将简单地撤销代表命令执行用户运行的所有进程,甚至是 shell。您可以尝试使用 sudo 来终止其他用户的进程。
sudo -u user1 kill -9 -1
或者只是简单地使用-u
标志来pkill
命令。