什么是子进程和父进程

什么是子进程和父进程,第1张

1、父进程

指已创建一个或多个子进程的进程。在UNIX里,除了进程0以外的所有进程都是由其他进程使用系统调用fork创建的,这里调用fork创建新进程的进程即为父进程,而相对应的为其创建出的进程则为子进程,因而除了进程0以外的进程都只有一个父进程,但一个进程可以有多个子进程。

2、子进程

指的是由另一进程(对应称之为父进程)所创建的进程。子进程继承了对应的父进程的大部分属性,如文件描述符。在Unix中,子进程通常为系统调用fork的产物。在此情况下,子进程一开始就是父进程的副本,而在这之后,根据具体需要,子进程可以借助exec调用来链式加载另一程序。

扩展资料

父子进程之间的关系

1、关于资源

子进程得到的是除了代码段是与父进程共享的意外,其他所有的都是得到父进程的一个副本,子进程的所有资源都继承父进程,得到父进程资源的副本,既然为副本,也就是说,二者并不共享地址空间。两个是单独的进程,继承了以后二者就没有什么关联了,子进程单独运行。

2、关于文件描述符

继承父进程的文件描述符时,相当于调用了dup函数,父子进程共享文件表项,即共同 *** 作同一个文件,一个进程修改了文件,另一个进程也知道此文件被修改了。

参考资料来源:百度百科-父进程

参考资料来源:百度百科-子进程

用pstree命令就看到进程之间的关系了,所有进程都是由最开始的init创建的,父进程逐个创建子进程。

大致是这样的(括号里是pid)

$pstree -p

init(1)-+-acpid(4555)

|-atd(18593)

|-auditd(4256)-+-audispd(4258)---{audispd}(4261)

|`-{auditd}(4257)

|-automount(4536)-+-{automount}(4537)

| |-{automount}(4538)

| |-{automount}(4541)

| `-{automount}(4544)

....(中间省略)....

|-xfs(4692,xfs)

自己用命令查一下吧,比较清晰

父子进程

在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。


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

原文地址:https://54852.com/yw/8912946.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存