os.fork()方法
该方法会衍生出一个子进程,父进程和子进程都会执行接下来的代码,方法返回值根据进程不同,父进程返回>0的一个数值,子进程返回0。
想获得操作系统层面上的进程id需要调用os.getpid()
创建子进程后,父进程退出后子进程也会被回收,所以父进程一般需要调用os.wait()或os.waitpid()方法等待子进程结束
os.wait()等待任意一个子进程结束,os.waitpid(pid,options)等待指定pid的进程结束。
守护进程:
os.umask(0) #修改文件模式,让进程有最大权限,保证进程有读写执行权限,这个不是一个好的方法。
os.setsid() #该方法做一系列的事:首先它使得该进程成为一个新会话的领导者,接下来它将进程转变一个新进程组的领导者
#最后该进程不再控制终端, 运行的时候,建立一个进程,linux会分配个进程号。然后调用os.fork()创建子进程。若pid>0就是自己,自杀。子进程跳过if语句,通过os.setsid()成为linux中的独立于终端的进程(不响应sigint,sighup等)。
进程间管道通信:
r,w=os.pipe()
r=os.fdopen(r)
w=os.fdopen(w,'w')
w.write(str)
r.read()
获取指定信号后执行指定函数:
import signal
signal.signal(sig,function) #获取指定sig后执行function
os.kill(pid,sig) #发送sig信号给进程id为pid的进程
进程退出的方法有:
sys.exit(status),status为0代表正常退出,为1是异常退出
os._exit(status),退出并返回status,不执行清理工作直接退出
os.kill(ospid,signal),模拟unix系统操作,所以ospid为unix下的进程id(os.getpid),signal有4种:
SIGINT 终止进程 中断进程
SIGTERM 终止进程 软件终止信号
SIGKILL 终止进程 杀死进程
SIGALRM 闹钟信号