can't kill PID from script loop
我需要一个脚本函数来获取剪贴板(剪贴板管理器)的 pid 并杀死剪贴板。我认为非常简单的东西,除了出于某种原因,shell 正在吐出一个关于杀死 PID 的错误。这是我的功能:
1 2 3 4 5 6 | stat=0 while [["$stat" == 0 ]] ; do clipitPid=$(ps aux|egrep -m 1"[ \\t]{1,}[0-9]{1,2}:[0-9]{1,2}[ \\t]*clipit$"|sed -r"s/^[^ ]*[ ]*([0-9]{3,5})[ \\t]{1,}.*$/\\1/") #; echo"\\$clipitPid: ${clipitPid}" kill"$clipitPid" 0>/dev/null 1>/dev/null 2>/dev/null stat="$?" done |
这是终端错误:
1 2 3 4 5 | 10:12 ~ $ stat=0 ; while [["$stat" == 0 ]] ; do clipitPid=$(ps aux|egrep"[ \\t]{1,}[0-9]{1,2}:[0-9]{1,2}[ \\t]*clipit$"|sed -r"s/^[^ ]*[ ]*([0-9]{3,5})[ \\t]{1,}.*$/\\1/") ; echo"\\$clipitPid: ${clipitPid}" ; kill"$clipitPid" 0>/dev/null 1>/dev/null 2>/dev/null ; stat="$?" ; done $clipitPid: 24760 24791 bash: kill: 24760 24791: arguments must be process or job IDs |
我已经尝试将发送输出删除为 null,这没有任何区别。
我有两个 clipit 实例正在运行,以确保两个 PID 都被检测到并被杀死;但是,PID 的回声正常,但没有被核弹。但是,如果我手动"杀死 24760 24791",则 PID 将被杀死:
1 2 3 4 | 10:12 ~ $ kill 24760 24791 10:12 ~ $ ps aux|grep clipit [3]- Terminated clipit [4]+ Terminated clipit |
我在这里有什么错误的任何想法,我会很感激阅读它们。
编辑
实际上,如果我只有一个 clipit 实例正在运行,那么它会被上面的在线程序杀死。 2 个或更多剪辑,然后它无法杀死任何剪辑,但检索 PID 正常。
n
n
n
一开始我无法破译你相当复杂的 egrep,但如果你试图杀死某个进程 ID,那该怎么办:
1 | kill `ps ax | fgrep clipit | fgrep -v fgrep | awk '{ print $1 }'` |
awk 是古老的 AT 之一