我有一个 bash 脚本在无限 while 循环中运行命令。该脚本看起来像:
while :
do
python3 my_program.py
done
有没有一种简单的方法可以从终端终止这个 while 循环,而不会中断 python 进程?即Python进程将完成,然后循环终止。
也许换一种说法:是否存在一个 while 循环,其终止条件是某个终端输入?
答案1
您可以捕获SIGINT
脚本并设置循环退出条件。运行你的程序会setsid
阻止它SIGINT
从CTRL+接收C
#! /bin/bash
STOPFILE=/tmp/stop_my_program
rm -f $STOPFILE
trap "touch $STOPFILE" INT
while [ ! -f $STOPFILE ]
do
setsid python3 my_program.py
done
rm -f $STOPFILE
答案2
您可以将进程置于后台,然后等待该进程完成,然后再开始下一个循环。这将允许您在不终止 python 进程的情况下终止循环。
while : ; do
python3 my_program.py &
while true; do
kill -0 %1 || break
sleep 1
done
done
然后只需C-C
(ctrl-c) 中断循环。
kill -0
意味着不真正杀死,但如果没有什么可(不)杀死的,则以失败代码退出。