根据输入参数 pkill 给定进程
pkill given process depending on input arguments
我有一个 python 进程 运行ning,名为 test.py
,我从带有输入参数的 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
运行s 作为守护进程或以某种方式在后台运行 运行s。否则,您的 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..."
我有一个 python 进程 运行ning,名为 test.py
,我从带有输入参数的 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
运行s 作为守护进程或以某种方式在后台运行 运行s。否则,您的 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..."