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