pkill根据输入参数指定进程



我运行了一个名为test.py的python进程,该进程是从带有输入参数的bash脚本中运行的。

$PWD/test.py -s $symbol -folder $folder -n $name -d $name

运行ps -elf | grep test.py后,进程将显示参数。

在同一个bash脚本中,我试图在给定输入参数的情况下终止这个过程:

pkill -f 'test.py -s $symbol -folder $folder -n $name -d $name'

但这似乎不起作用。

正确的语法是什么?我需要在某个地方添加括号()还是括号{}

正如注释中提到的@Aserre,您需要在pkill命令中使用双引号而不是单引号,以便在字符串中替换shell变量的值。

此外,请考虑默认情况下pkill发送SIGTERM。因此,test.py应该有一个信号处理程序,以便在接收到SIGTERM时关闭。如果test.py没有信号处理程序,它将忽略该信号并继续运行。如果是这种情况,使用pkill -9,这将杀死ptest.py,因为信号9不能被忽略:

pkill -9 -f "test.py -s $symbol -folder $folder -n $name -d $name"

最后,我假设test.py作为守护进程运行,或者以某种方式在后台运行。否则,bash脚本将等到它退出后再继续。如果test.py不是守护进程,那么bash脚本可以在后台运行它。这里有一个例子:

#!/usr/bin/env bash
symbol=pi
folder=/tmp
name=john
$PWD/test.py -s $symbol -folder $folder -n $name -d $name &
pid=$!
echo "killer: started test.py ($pid)..."
sleep 5
echo "killer: killing test.py..."
# you may use -9 instead of -SIGTERM
pkill -SIGTERM -f "test.py -s $symbol -folder $folder -n $name -d $name"
wait $pid
echo "killer: test.py is dead; exiting..."

最新更新