感谢您的帮助!
我想从shell脚本启动和停止Python脚本。开始工作正常,但我想在10秒后停止/终止Python脚本。 (这是一个不断计数的计数器)。芽不会停止....我认为它挂在第一行。
开始等待10秒钟的正确方法是什么?
Shell脚本:
python /home/pi/count1.py
sleep 10
kill /home/pi/count1.py
它还没有用。我明白在后台编写脚本。那工作!但是我做了另外一次评论,形成了我的覆盆子:
python /home/pi/count1.py &
sleep 10; kill /home/pi/count1.py
/home/pi/sebastiaan.sh:第19行:kill:/home/pi/count1.py:参数必须是进程或作业ID
它必须在:(但是什么?感谢您的帮助!)
sleep 10; kill /home/pi/count1.py
答案 0 :(得分:9)
你是对的,shell脚本在第一行“挂起”,直到python脚本完成。如果没有,则shell脚本将不会继续。因此,您必须在shell命令的末尾使用&
在后台运行它。这样,python脚本启动,shell脚本继续。
kill
命令不采用路径,它采用进程ID。毕竟,您可能会多次运行相同的程序,然后尝试杀死第一个或最后一个。
bash shell支持$!
变量,这是最后一个后台进程的pid。
您当前的示例脚本是错误的,因为它不会并行运行python作业和睡眠作业。没有装饰,脚本将等待python作业完成,然后睡10秒,然后杀死。
你可能想要的是:
python myscript.py & # <-- Note '&' to run in background
LASTPID=$! # Save $! in case you do other background-y stuff
sleep 10; kill $LASTPID # Sleep then kill to set timeout.
答案 1 :(得分:0)
如果操作系统允许,您可以终止任何其他进程。即如果它不是属于操作系统本身的一些关键过程。
命令kill使用PID来终止进程,而不是进程的名称或命令。
使用pkill。
您也可以向其发送一个不同的信号,而不是SIGTERM(请求终止程序),您可能希望在Python应用程序中检测并响应它。
例如,您可能希望检查进程是否处于活动状态并从中获取一些数据。
为此,请选择其中一个用户自定义信号,并使用信号模块在Python程序中注册它们。
要查看脚本挂起的原因,请参阅奥斯汀的答案。