当我在反向shell示例中偶然发现这个名为daemonize()
的方法时,我正在寻找GitHub。 source
我不太明白它在这种情况下的作用是什么,不会从命令行运行这样的代码:python example.py &
没有达到同样的效果?
Deamonize方法来源:
def daemonize():
pid = os.fork()
if pid > 0:
sys.exit(0) # Exit first parent
pid = os.fork()
if pid > 0:
sys.exit(0) # Exit second parent
答案 0 :(得分:1)
查看Orphan Processes和Daemon Process。没有父级的进程成为init的子进程(pid 1)。
当关闭一组进程时,比如一个bash实例的所有孩子,操作系统将会给那个bash的孩子们带来一丝叹息。孤儿,在这种情况下被强迫,或者由于某些意外而被迫,不会得到这种治疗,并且会在更长时间内待在一起。
答案 1 :(得分:1)
后台进程 - 使用python2.7 <file>.py
信号运行&
- 与真正的守护程序进程不同。
真正的守护进程:
&
,也会发生这种情况,并且是相似性结束的地方。&
不会发生这种情况 - 过程保持不变,只是移到后台。&
不会发生这种情况 - 它仍会写入终端。&
运行可以让您的进程被SIGHUP杀死。screen
在新终端中生成的后台任务通常可以完成相同的工作,但效率较低,你也可以称之为守护进程这是一个长期运行的后台任务。 与真正的守护进程之间唯一真正的区别在于后者只是试图避免所有可能的死亡途径。
您看到的代码只是分叉当前进程。从本质上讲,它克隆了当前的流程,杀死了它的父母和后台的行为。通过简单地成为一个单独的进程,不会阻止当前的执行 - 如果你问我,有点丑陋的黑客,但它的工作原理。