python实现将程序以守护进程的方式运行

1. 概念区分

1. 前台进程:进程默认是前台运行的,会占据shell控制台,用户无法做其他操作。可以使用‘&’将前台进程转为后台进程

2. 后台进程:切为后台进程称为job,[4] 是job ID , 5094是PID, 

1)jobs  -l  /  ps  可以查看后台进程

2)后台进程是依赖控制台的,控制台关闭,相关的后台进程关闭

3)fg 1将job ID 为1的进程调到前台来运行

4)bg 将一个在后台暂停的命令,变成继续执行 如果后台中有多个命令,可以用bg jobID

python实现将程序以守护进程的方式运行

3. 守护进程:守护进程顾名思义,主要用于一些长期运行,守护着自己的职责(监听端口,监听服务等)。守护进程成为了进程组长(或者会话组长),和控制终端失去了联系(其文件描述符也是继承于父进程的,但是在变成守护进程的同时stdin,stdout,stderr和控制台失去联系了)

2. 将程序以守护进程的方式运行

python实现将程序以守护进程的方式运行python实现将程序以守护进程的方式运行

/dev/null 看作"黑 洞" . 它非常等价于一个只写文件. 所有写入它的内容都会永远丢失. 而尝试从它那儿读取内容则什么也读不到。

chmod  755 (属主7,组权5,其他用户的权限5)

umask  022 设置新创建文件和目录的默认权限,用的是补码的方式,也就是文件权限为644 (6-0, 6-2, 6-2),目录的权限为755(7-0,7-2,7-2)

os.umask(0)    #修改文件模式,让进程有最大权限,保证进程有读写执行权限,这个不是一个好的方法。

os.setsid()       #该方法做一系列的事:首先它使得该进程成为一个新会话的领导者,接下来它将进程转变一个新进程组的领导者,#最后该进程不再控制终端, 运行的时候,建立一个进程,linux会分配个进程号。然后调用os.fork()创建子进程。若pid>0就是自己,自杀。子进程跳过if语句,通过os.setsid()成为linux中的独立于终端的进程。

os.dup2将系统输入、输出、错误的输出均输出到/dev/null中。