在Linux环境下,编制一个程序,程序中创建一个子进程。

在Linux环境下,编制一个程序,程序中创建一个子进程。,第1张

#!/bin/python

import os

import time

def my_fork():

child_pid =osfork()

while 1==1:

if child_pid ==0 :

print "c \n "

# print "child process :PID # %s" % osgetpid()

# timesleep(3)

else:

print "p \n"

# print "parent process: PID# %s" % osgetpid()

# timesleep(3)

if __name__ == "__main__":

my_fork()

调用fork后,子进程会复制父进程的进程信息,如文件描述符,这样fd[0], fd[1]在子进程中有同样的一个拷贝,他们的引用都为2,也就是两个进程在使用他们。而实际上父进程只使用fd[1],子进程只使用fd[0],这样如果父进程不想使用fd[1]了,调用close()来关闭fd[1],这是不成功的,因为这样只是将fd[1]的引用减少到1,fd[1]没有被系统回收,仍然在子进程中有效,所以必须父进程close(fd[0]);子进程close(fd[1])

父子进程

在linux系统里面,子进程由父进程fork而来,而所有的进程都是由init进程或其子进程fork而来,即init进程是所有进程的祖先。

父子进程的运行是相对独立的,一方的退出不会导致另一方退出。

进程组和会话

Session特点

session可以在任何时候创建,调用setsid函数即可,session中的第一个进程即为session的leader,leader是不能变的。常见的创建session的场景是用户登录,启动bash进程时将会创建新的session,bash进程会作为session的leader,随后bash里面运行的进程(不特殊处理)都将属于这个session。

session的主要特点是当session的leader退出后,session中的所有其它进程将会收到SIGHUP信号,其默认行为是终止进程,即session的leader退出后,session中的其它进程也会退出。

如果session和tty关联的话,它们之间只能一一对应,一个tty只能属于一个session,一个session只能打开一个tty。当然session也可以不和任何tty关联。

进程的启动方式:

1)前台启动:用户输入命令,直接执行程序

2)后台启动:在命令行尾加入“&”符号

要使终端关闭时进程不退出,有以下几种情况:

1)用户进程拦截SIGHUP信号。

2)使用户进程和bash进程不在一个session。

以上就是关于在Linux环境下,编制一个程序,程序中创建一个子进程。全部的内容,包括:在Linux环境下,编制一个程序,程序中创建一个子进程。、linux pipe();父进程需要close(fd[0]);子进程close(fd[1]);为什么都需要关闭一个、linux后台启动进程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zz/9628890.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-30
下一篇2023-04-30

发表评论

登录后才能评论

评论列表(0条)

    保存