wel*_*lly 6 unix bash kill awk xargs
我试图杀死任何与 mysql 相关的进程。我正在拼凑一个命令,到目前为止,还没有想出正确的解决方案。另一个考虑是,最后一个进程将对应于命令“grep mysql”——下面命令的一部分。到我尝试杀死它时,此进程将不再存在,因此需要将其从通过管道传输到 kill -9 的输入中排除。完成此任务的最佳方法是什么?到目前为止,我有不完整的命令:
ps -A | grep mysql | awk '{print $1}'
Run Code Online (Sandbox Code Playgroud)
它具有(假的,就本示例而言)输出
11111
22222
33333 # process id to be excluded
Run Code Online (Sandbox Code Playgroud)
我假设我可以像这样将它传递给 xargs kill -9 :
ps -A | grep mysql | awk '{print $1}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
并找出排除最后一个 pid 的方法,但我尝试的所有方法似乎都无法正常工作。
Fat*_*ror 19
可能在这里最简单的事情是 make grep
not match 自己的命令:
ps -A | grep [m]ysql | awk '{print $1}' | xargs kill -9
Run Code Online (Sandbox Code Playgroud)
m 周围的括号使其成为仅包含 m 的字符集,它不会更改模式但不会在ps
输出中与自身匹配。这是避免此问题的规范方法。我还想补充一点,如果您有pkill
运行pkill -9 mysql
更容易的命令。
还值得注意的是,您应该尽可能避免使用 SIGKILL (-9),因为它不会让目标进程有机会正常退出。如果您还没有,您应该先尝试使用 SIGTERM(默认)。
awk 有一个 system() 命令,可以让你直接杀死它......像这样的东西。
ps ¦awk '/[m]ysql/{system( "kill -9 "$1)}'
Run Code Online (Sandbox Code Playgroud)
方括号的原因与前面类似。它可以防止 awk 被杀死并关闭管道。
/string/ 将执行类似 grep 的行匹配。
归档时间: |
|
查看次数: |
21306 次 |
最近记录: |