Linuxでプログラム的にバックグラウンドプロセスを開始する

Linuxでプログラム的にバックグラウンドプロセスを開始する

&、、、+などを使用せずにバックグラウンドでLinuxプロセスを起動できますnohupか?tmuxdisownCTRL-Zbg

つまり、私が探しているものは次のとおりです。無料コンソールプログラムユーザーではなく、プログラム自体内でコンソールから分離された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

関連情報