python - Bash:WAITING后台python进程

标签 python linux bash macos shell

<分区>

我正在尝试:

  1. 启动后台进程(python 脚本)
  2. 运行一些 bash 命令
  3. 然后在前台任务完成后发送 control-C 关闭后台进程

我尝试过的最小示例 - Python test.py:

import sys

try:
    print("Running")
    while True:
        pass
except KeyboardInterrupt:
    print("Escape!")

Bash test.sh:

#!/bin/bash

python3 ./test.py &
pid=$!

# ... do something here ...
sleep 2

# Send an interrupt to the background process
# and wait for it to finish cleanly
echo "Shutdown"
kill -SIGINT $pid
wait

result=$?
echo $result
exit $result

但是 bash 脚本似乎在等待,SIGINT 信号没有被发送到 python 进程。

我正在使用 Mac OS X,并且正在寻找适用于 linux + mac 上的 bash 的解决方案。

编辑:Bash 正在发送中断,但 Python 在作为后台作业运行时没有捕获它们。通过将以下内容添加到 Python 脚本进行修复:

import signal
signal.signal(signal.SIGINT, signal.default_int_handler)

最佳答案

重点是 SIGINT 用于终止前台进程。您应该直接使用kill $pid 来终止后台进程。

顺便说一句,kill $pid 等于 kill -15 $pidkill -SIGTERM $pid

更新

你可以使用signal模块来处理这种情况。

import signal
import sys
def handle(signum, frame):
    sys.exit(0)
signal.signal(signal.SIGINT, handle)
print("Running")
while True:
    pass

关于python - Bash:WAITING后台python进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45807662/

相关文章:

python - 为什么我在这个简单的 python 打印程序中遇到语法错误?

linux - 在 bash shell 中使用 scp 时出现段错误(核心已转储)

python - 模拟 ec2.describe_regions() (AWS) 的代理

linux - Gitweb 显示不正确

linux - 如何在 shell 中获取一年中的某一天?

php - 通过 PHP 运行 bash 命令,更改目录然后执行二进制文件

mysql - 表热图中的 0-1-2 矩阵

linux - 如何使用 bash 删除文件中的前 N ​​行并保留剩余行

python - 未找到 Conda 命令

Python - Bokeh vbar悬停工具