python - 在 i3 中使用 disown 时 Python 退出时子进程终止

标签 python linux process

我目前有以下设置:

在 i3 配置中:

bindsym $mod+d exec xfce4-terminal --title="Supermenu" -e "path/to/supermenu"
for_window [title="Supermenu"] floating enable

它执行的脚本是一个 Python 脚本可执行文件(使用 shebang 和 chmod +x),其中有这一行(在许多其他行中,与它无关):

os.system(command + " >/dev/null 2>&1 &")

我的期望是,当 Python 脚本退出时,command 调用的进程应该保持运行,因为 &。但是,一旦 xfce4-terminal 退出,它仍然会退出! (这发生在脚本明显终止之后)。

我也试过在最后加上 disown 和在开头加上 nohup,两者都没有区别。

我可以确认它在脚本退出时发生,因为我尝试使用 time.sleep 来查看它是否启动,是的,它启动了 - 但在终端关闭后终止。

但是,如果我启动 firefoxghetto-skype,它们会终止,但是 xfce4-terminal 不会“菜单”关闭后终止!

甚至很奇怪 - 如果我从 xfce4 终端(而不是 i3)启动脚本,子进程也不会终止!

我对发生的事情感到非常困惑,如果能帮助我理解它,并防止 xfce4-terminal 以外的进程在菜单关闭后关闭,我将不胜感激。

最佳答案

您没有重定向标准输入。我猜它在 xfce4-terminal 关闭时得到一个 EOF。

关于python - 在 i3 中使用 disown 时 Python 退出时子进程终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39794457/

相关文章:

python - 以菱形打印数字

linux - 如何剥离grep的输出?

linux - 在 Linux 中 fork COW

C++ 进程管理

c - 在两个套接字之间共享信息

python - cron 和 virtualenv

python - 如何使CV2在python3.6上运行?

Python:你将如何保存一个简单的设置/配置文件?

c++ - 如何编译、设置和创建一个库 .so 在 linux 中共享

php - 仅在机器空闲时运行 cron 作业 (linux)