终止脚本,但允许当前正在执行的程序退出

终止脚本,但允许当前正在执行的程序退出

我有一个 bash 脚本在无限 while 循环中运行命令。该脚本看起来像:

while :
do
     python3 my_program.py
done

有没有一种简单的方法可以从终端终止这个 while 循环,而不会中断 python 进程?即Python进程将完成,然后循环终止。

也许换一种说法:是否存在一个 while 循环,其终止条件是某个终端输入?

答案1

您可以捕获SIGINT脚本并设置循环退出条件。运行你的程序会setsid阻止它SIGINTCTRL+接收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意味着不真正杀死,但如果没有什么可(不)杀死的,则以失败代码退出。

相关内容