【问题标题】:Python: prevent system process from going backgroundPython:防止系统进程进入后台
【发布时间】:2013-05-04 00:31:53
【问题描述】:

我正在尝试使用 python 编写一个下载器脚本(放置在统一午餐器中),它使用所有正确的参数调用 wget。该脚本从剪贴板中提取 url 和从 gtk 主剪贴板中提取文件名,通过文本选择或复制和鼠标中键单击进行粘贴操作。代码比较简单。

import gtk
from os import system as sys

url = str(gtk.clipboard_get().wait_for_text())
name = str(gtk.clipboard_get(gtk.gdk.SELECTION_PRIMARY).wait_for_text())

if name.lower()=='none' :
    sys("/usr/bin/canberra-gtk-play --id='dialog-warning'")
    exit(1)

sys("/usr/bin/canberra-gtk-play --id='downloading'")
com='wget -c -t 0 "%s" -O "%s"' % (url,name)
sys("gnome-terminal -e '%s'" % com)

脚本会打开一个终端窗口并输出 wget 输出。问题是关闭 gnome-terminal 不会导致 wget 退出,而是在后台运行。有没有可能阻止这种情况发生

【问题讨论】:

    标签: python ubuntu wget gnome-terminal ubuntu-unity


    【解决方案1】:

    问题在于,by designwget 忽略了在其父进程终止时发送的SIGHUP

    一种解决方案是使用 python signal 模块来捕获SIGCHLD,当您关闭终端窗口时应该将其发送到您的脚本,并注册一个处理程序以显式发送SIGINTSIGTERMwget

    【讨论】:

    • 我该怎么做。你能举个例子吗,我会把它合并到代码中
    • @SaketDandawate 如果您不熟悉信号,使用类似thishup2term wget <params> 的脚本运行wget 可能更简单,它将父进程的SIGHUP 转换为SIGTERM,或者只是使用 CTRL-C 关闭窗口(将 SIGINT 发送到 wget)而不是关闭终端窗口。
    猜你喜欢
    • 1970-01-01
    • 2015-08-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-16
    相关资源
    最近更新 更多