【发布时间】:2019-06-22 15:11:06
【问题描述】:
我启动了一个 python 脚本,然后过了一段时间我想杀死它。但在杀死它之前,我想启动另一个相同脚本的副本,然后在启动新脚本后杀死前一个。我想循环执行此操作。
这是我的代码,我只需要一种干净的方式来杀死脚本。我不想使用超时。
#!/bin/bash
while true
do
echo "starting FIRST Consumer.py : $(date +"%T")"
python3 /home/irum/Desktop/Marketsyc/Consumer.py &
sleep 20
echo "starting SECOND Consumer.py : $(date +"%T")"
python3 /home/irum/Desktop/Marketsyc/Consumer.py &
# Here I want to kill FIRST Consumer.py
sleep 20
# Here I want to kill SECOND Consumer.py
done
【问题讨论】:
-
有什么理由不想使用 timeout 20 python3 ...? man7.org/linux/man-pages/man1/timeout.1.html
-
是的,我正在使用超时,但有时它不会杀死我的脚本。但开始新的。一段时间后,我运行了 8 个脚本。
-
您确定代码示例中的 cmets 吗? (你把 SECOND 和 FIRST 倒置了吗?)
-
我已经编辑了 cmets :p
-
清洁和杀戮是一种相互矛盾的要求。其中 kill 的意思是“不惜一切代价停止”,而 clean 的意思是“优雅地退出”。如果您的程序在
SIGTERM信号之后没有退出,那么它行为不端。在使用SIGKILL之前修复你的python 脚本。使用SIGKILL的缺点包括如果进程无法保存有关已消费内容的状态,则会丢失状态。