Linux Shell脚本中的终止进程
我有一个非常简单的问题:当我运行一个shell脚本时,我启动一个程序 在无限循环中运行。过了一段时间,我想在我可以之前停止这个程序 它使用不同的参数再次运行。现在的问题是,我如何找出 我什么时候执行它?基本上,我想做这样的事情:Linux Shell脚本中的终止进程,linux,shell,Linux,Shell,我有一个非常简单的问题:当我运行一个shell脚本时,我启动一个程序 在无限循环中运行。过了一段时间,我想在我可以之前停止这个程序 它使用不同的参数再次运行。现在的问题是,我如何找出 我什么时候执行它?基本上,我想做这样的事情: echo "Executing app1 with param1" ./app1 param1 & echo "Executing app1" ..do some other stuff #kill somehow app1 echo "Exec
echo "Executing app1 with param1"
./app1 param1 &
echo "Executing app1"
..do some other stuff
#kill somehow app1
echo "Execution of app1 finished!"
谢谢 您可以使用
killall app1
ps ux | awk '/app1/ && !/awk/ {print $2}'
然后您应该能够在bash
$中杀死它……(但是,如果您有多个app1实例,您可以将它们全部杀死)代码>扩展到在后台启动的最后一个进程的PID。因此,您可以:
./app1 param1 &
APP1PID=$!
# ...
kill $APP1PID
在大多数shell(包括Bourne和C)中,您在后台启动的最后一个子进程的PID将存储在特殊变量$
#!/bin/bash
./app1 &
PID=$!
# ...
kill $PID
特殊变量部分下有。如果您想了解流程的PID,可以使用ps
:
pidof app1
pkill -f app1
[user@desktop ~]$ ps h -o pid -C app1
参数-o pid
表示您只需要进程的pid,-C app1
指定要查询的进程的名称,参数h
用于抑制结果表的标题(如果没有它,您将在pid本身上方看到一个“pid”标题)。并不是说,如果有多个进程具有相同的名称,那么将显示所有的PID
如果要终止该进程,可能需要使用:
[user@desktop ~]$ kill `ps h -o pid -C app1`
尽管如果您只是想这样做(并且如果您不介意杀死所有“app1”进程),那么killall
更干净。如果只需要第一个或最后一个PID,也可以分别使用head
或tail
给用户的提示是:%process
替换为process
的PID。因此,在鱼类中,您可以使用:
user@desktop ~> kill %app1
我遇到了一个问题,我正在杀死的进程是一个python脚本,我有另一个脚本也在运行python。我不想因为另一个脚本而杀死python
我使用awk来处理这个问题(让myscript成为您的python脚本):
killps-ef | grep'python myscript.py'| awk'/awk/&/grep/{print$2}'
可能效率不高,但在这样的任务中,我宁愿用效率换取多功能性。谢谢你的回答,但这是我最喜欢的!