在Linux下以编程方式启动后台进程

在Linux下以编程方式启动后台进程

是否可以在后台启动 Linux 进程而不使用&, nohup, tmux, disown, CTRL-Z+bg等等。

换句话说,我正在寻找的是类似的东西自由控制台Windows API,从程序本身内部与控制台分离,而不是由程序的用户。

答案1

我现在没有 python3 源。

伪Python代码如下所示:

token = fork()
if ( token == 0 ) :
    close(stdin) ; close(stdour) ; close(stderr)
else :
    print (token)
    return
## actual payload code start here

然后我可以关闭终端,ssh 连接,分叉进程将保留。


不关闭 stdin 等。将阻止终端/ssh 会话退出。

作为一个实用点,我主要将标准输出重新发送到日志文件以打印调试/信息消息。


摘自我的 python3 代码

    from os import fork, getuid, mkdir, path, unlink

    ## payload code initialisation

    pid=fork()
    if pid > 0 :
            print (f'démon pour {moi} forké avec le pid {pid}')
            pidtxt="/run/user/"+str(getuid())+"/"+moi+".pid"
            if path.isfile(pidtxt) : unlink(pidtxt)
            fpid=open(pidtxt,"w")
            print('{pid}'.format(pid=pid),file=fpid)
            fpid.close()
            exit()

    sys.stdout.close()
    sys.stdin.close()
    sys.stderr.close()
    flog = open("log/"+moi+".log","a",buffering=1)
    sys.stdout = flog
    sys.stderr = flog

    ## payload code run

相关内容