我尝试在.bash_profile中编写一个函数来定义一个用于终止进程的函数,如下所示:
function pkill {
pid = ps -elf|grep python|grep $1|awk -F " " '{print $4}'
kill -9 pid
}
我想要做的是使用“pkill keyword”来杀死pid=[ps -elf|grep python|grep keyword|awk -F " " '{print $4}']的进程,但我的代码不起作用。我应该如何编写这个函数?
关于kill:
我的python进程是多线程的。我尝试过kill pid
,,kill -TERM pid
或者kill -INT pid
,但仍然可以在进程列表中找到它。所以我使用了“kill -9”。
答案1
pid=$(ps -elf|grep vim|grep 'screenrc' | awk -F" " '{print $4}')
但你也许可以使用程序包反而:
pid=$(pgrep -f "python .*$1")
或者
pids=$(pgrep -d' ' -f "python .*$1")
kill -9 $pids
如果你感觉自信(鲁莽!):
\pkill -9 -f "python .*$1"
答案2
您列出并丢弃大量多余的垃圾有什么理由吗?
(我假设您正在使用 GNU ps,但我更喜欢 BSD ps 语法。它也受 GNU ps 支持,因为 GNU ps 支持一切。)
# as others have noted 'pkill' is an existing command, so let's not clash with its name
function pypkill {
pids=$(ps ax -opid= -ocomm= | grep python | grep "$1" | awk -F " " '{print $1}')
kill -TERM $pids
}
分解:
- pid=
- 子 shell 可能会返回多个 PID。这将捕获所有 PID
- $( )
- 子 shell。括号内的命令将被执行,并返回其输出。
- 聚苯乙烯
- 显示系统上的所有进程(BSD 语法)
- -opid=-ocomm=
- 告诉 ps 输出两列:PID 和命令名称,并省略标题行
- 杀死-TERM $ pids
- 使用 kill -9 是最后的手段。在大多数情况下,您需要的是 kill -TERM,或者可能是 kill -INT,然后再诉诸 kill -KILL。
答案3
这难道不应该更像
pid=$(ps -elf|grep python|grep $1|awk -F" " '{print $4}')
kill -9 $pid