Linux 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

我有一个非常简单的问题:当我运行一个shell脚本时,我启动一个程序 在无限循环中运行。过了一段时间,我想在我可以之前停止这个程序 它使用不同的参数再次运行。现在的问题是,我如何找出 我什么时候执行它?基本上,我想做这样的事情:

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脚本): kill
ps-ef | grep'python myscript.py'| awk'/awk/&/grep/{print$2}'


可能效率不高,但在这样的任务中,我宁愿用效率换取多功能性。

谢谢你的回答,但这是我最喜欢的!