当前位置: 首页 > 面试题库 >

使用subprocess.check_output()创建一个子进程

斜浩穰
2023-03-14
问题内容

我在Linux机器上运行一个python脚本,该脚本使用subprocess.check_output()创建一个子进程,如下所示:

subprocess.check_output(["ls", "-l"], stderr=subprocess.STDOUT)

问题是,即使父进程死亡,子进程仍在运行。父母去世后,我还有什么办法可以杀死子进程?


问题答案:

您的问题是使用subprocess.check_output-是正确的,您无法使用该接口获取子PID。改用Popen:

proc = subprocess.Popen(["ls", "-l"], stdout=PIPE, stderr=PIPE)

# Here you can get the PID
global child_pid
child_pid = proc.pid

# Now we can wait for the child to complete
(output, error) = proc.communicate()

if error:
    print "error:", error

print "output:", output

为确保您在出口处杀死孩子:

import os
import signal
def kill_child():
    if child_pid is None:
        pass
    else:
        os.kill(child_pid, signal.SIGTERM)

import atexit
atexit.register(kill_child)


 类似资料:
  • 问题内容: 我在Linux机器上运行python脚本,该脚本使用subprocess.check_output()创建一个子进程,如下所示: 问题是,即使父进程死亡,子进程仍在运行。父母去世后,我还有什么办法可以杀死子进程? 问题答案: 您的问题是使用-是正确的,您无法使用该接口获取子PID。改用Popen: 为了确保您在出口处杀死孩子:

  • 问题内容: 是否可以使用其他用户帐户在Windows上创建新进程?我知道有一个上下文菜单“运行方式”,但我想从Java中进行操作。我有用户名和密码。 问题答案: 您需要使用Java本机接口(JNI)编写DLL,因为您不能使用纯Java代码来执行此操作。 DLL本身需要调用 CreateProcessAsUser 函数在另一个用户的上下文中创建一个进程。要成功创建该过程,您需要提供对该函数的访问令牌

  • 问题内容: 我正在尝试创建带有分页的UICollectionView,并且每个项目的最大宽度为250点,我已经设法创建了它,但是我遇到了两个问题:第一个项目开始时不正确,但是开始时有更多空间当我尝试滑动时,总会有一些东西无法让我平稳滑动。 看起来是这样的: 影片连结 这是我的代码: CenterCellCollectionFlowLayout.swift MainViewController.sw

  • 问题内容: 我正在编写一个Python脚本,该脚本需要将一些数据写入临时文件,然后创建一个运行C ++程序的子进程,该程序将读取该临时文件。我正在尝试使用此功能,但是根据文档, 在命名的临时文件仍处于打开状态时,是否可以使用该名称第二次打开文件,会因平台而异(可以在Unix上使用;在Windows NT或更高版本上不能使用)。 实际上,在Windows上,如果我在写入后刷新了临时文件,但是在我希望

  • Creating an application (创建一个应用) !important: 1. 确保安装 StrongLoop. 2. 已经阅读 核心概念 创建一个新的loopback 应用 Standard project layout(标准的项目布局) Main application script - server.js (启动脚本) Creating a new application(