是否可以在后台启动 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