如何获取由双叉创建的守护进程的pid?

2024-04-19 23:44:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个简单的方法,通过双叉来实现守护进程:

    try:
        child = os.fork()
        if child > 0:
            sys.exit(0)
    except OSError:
        print("fork 1 failed")
        sys.exit(1)
    try:
        child = os.fork()
        if child > 0:
            sys.exit(0)
    except OSError:
        print("fork 2 failed")
        sys.exit(1)
    os.execvp(args[0], args) # what the daemon's supposed to be doing

或者,这是我以前的情况,但我怀疑这是不正确的:

^{pr2}$

我想在与之断开连接的祖父母进程中获取守护进程的进程id。在使用的时候有可能吗os.fork操作系统()和执行操作系统()(与线程、子进程等相反)?在


Tags: 方法childif进程ossysexitargs
1条回答
网友
1楼 · 发布于 2024-04-19 23:44:29

使用^{}

import os
import sys

try:
    r, w = os.pipe()
    print('grandparent {}'.format(os.getpid()))
    child = os.fork()
    if child > 0:
        grandchild_pid = int(os.fdopen(r).readline().strip())
        print('grand child pid: {}'.format(grandchild_pid))
        sys.exit(0)
except OSError:
    print("fork 1 failed")
    sys.exit(1)
try:
    print('parent {}'.format(os.getpid()))
    child = os.fork()
    if child > 0:
        # Pass child (grandchild)'s pid to parent.
        os.write(w, '{}\n'.format(child)) 
        sys.exit(0)
except OSError:
    print("fork 2 failed")
    sys.exit(1)

print('child {}'.format(os.getpid()))

更新

替换以下行:

^{pr2}$

有:

os.write(w, '{}\n'.format(child).encode())

让它在python3.x中工作

相关问题 更多 >