如何让Python 3.11.5进程在MacOS Monterey 12.6.8上自我挂起?
在macOS上实现Python脚本自我挂起的方法
原脚本在Linux系统中能立即进入挂起状态,但在macOS中会等待2秒后退出,无法实现自我挂起:
#!/usr/bin/python3 import os import time os.system('/bin/kill -19 ' + str(os.getpid())) time.sleep(2)
问题原因
os.system会创建子进程来执行kill命令,当子进程向父进程(Python脚本本身)发送SIGSTOP信号时,父进程正处于等待子进程退出的阻塞状态,此时SIGSTOP信号会被延迟处理,直到os.system执行完成。等信号生效时,sleep(2)已经执行完毕,脚本直接退出,因此看不到挂起效果。
解决方法
直接使用Python标准库的os.kill函数,向当前进程发送SIGSTOP信号,无需通过子进程中转:
#!/usr/bin/python3 import os import signal # 向当前进程发送SIGSTOP信号,立即挂起自身 os.kill(os.getpid(), signal.SIGSTOP) # 这段代码会在进程被`kill -CONT <进程ID>`恢复后才执行 print("进程已恢复运行")
说明
在macOS中,脚本执行os.kill后会立刻进入挂起状态,需要在终端执行kill -CONT <你的Python进程ID>命令,才能恢复进程的运行。
内容的提问来源于stack exchange,提问作者Christos Hayward
相关产品推荐
相关产品推荐

