当前位置:首页 » 操作系统 » linux进程子进程退出

linux进程子进程退出

发布时间: 2022-11-07 08:11:10

㈠ 在linux编程中,父进程为什么要等待并回收子进程的退出状态不这样做会有什么后果

分几种情况:

  1. 父进程永不退出:这种情况下若子进程退出,而父进程没有收集子进程的退出状态,则此子进程会变为僵尸进程,一直占用少量资源,有危害;

  2. 父进程比子进程先退出:这种情况下父进程退出时,仍在运行的子进程会变为孤儿进程,孤儿进程会被托管给init进程,孤儿进程结束时由init进程负责回收;

  3. 父进程比子进程晚退出:子进程先退出时会变为僵尸进程,占用少量资源;待到父进程再退出时,子进程由僵尸进程变为孤儿进程,init进程会回收这些已僵死的孤儿进程,则这些已经僵死的孤儿进程就能瞑目而去了;

㈡ linux中 子进程异常退出怎么重启子进程

你好!
争议用父进程来监查,当子进程异常退出时,会发送SIGCHLD信号给父进程,父进程捕捉到信号后可以调用execl函数来重启这个程序
仅代表个人观点,不喜勿喷,谢谢。

㈢ LINUX里,父进程退出了,子进程一定会退出吗

不会,父进程退出后,子进程成为孤儿进程被init进程收养。如果需要用父进程回收子进程,就要在父进程里使用waitpid,这个函数会让父进程阻塞,直到子进程执行完成。

㈣ Linux C中父进程退出时,使用什么方法可使子进程退出

父进程退出前,使用 kill 向子进程发送SIGKILL信号。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>

int main(void)
{
pid_t pid;

pid = fork();
if (pid < 0) {
printf("fork error!\n");
exit(-1);
}

if (pid > 0) {
printf("Parent. ppid(%d), pid(%d)\n", getppid(), getpid());
kill(pid, SIGKILL);
wait(NULL);
printf("Done\n");
} else {
printf("Child. ppid(%d), pid(%d)\n", getppid(), getpid());
sleep(3);
}

return 0;
}

㈤ Linux C中父进程退出时,使用什么方法可使子进程退出

发信号,kill(子进程ID, SIG信号)
如果不只一个子进程,需要把所有的子进程ID存起来,然后用上述方法一个一个的kill
SIG信号需要能使子进程退出,如SIGQUIT,SIGINT...等一些默认的信号;也可以在子进程中捕获某些信号,然后子进程收到后自己退出
注意:最好是在子进程退出时,父进程要等待所有子进程退出

㈥ LINUX里,父进程退出了,子进程一定会退出吗

不。
若父进程退出,子进程尚未结束,则子进程会被init进程领养,也就是说init进程将成为该子进程的父进程。
若希望父进程退出,子进程也退出的话,可以使用线程,因为若进程结束,则还没结束的线程一定会立刻结束。或者如楼上所说,用信号,用atexit注册一个退出时执行的函数,这个函数中发送信号给子进程即可。

㈦ 在 linux中如何结束由一个父进程产生的所有子进程

父进程未结束,子进程先结束,会产生僵尸进程。
子进程在调用exit命令结束自己的生命的时候,其实它并没有真正的被销毁,而是留下一个称为僵尸进程(Zombie)的数据结构(系统调用 exit,它的作用是使进程退出,但也仅仅限于将一个正常的进程变成一个僵尸进程,并不能将其完全销毁)。
即使是root身份kill -9也不能杀死僵尸进程。补救办法是杀死僵尸进程的父进程(僵尸进程的父进程必然存在),僵尸进程成为"孤儿进程",过继给1号进程init,init始终会负责清理僵尸进程。
僵尸进程的避免:
(1) 父进程通过wait和waitpid等函数等待子进程结束,这会导致父进程挂起。
(2) 如果父进程很忙,那么可以用signal函数为SIGCHLD安装handler,因为子进程结束后, 父
进程会收到该信号,可以在handler中调用wait回收。
(3) 如果父进程不关心子进程什么时候结束,那么可以用signal(SIGCHLD, SIG_IGN) 通知内
核,自己对子进程的结束不感兴趣,那么子进程结束后,内核会回收, 并不再给父进程发送
信号。
(4) 还有一些技巧,就是fork两次,父进程fork一个子进程,然后继续工作,子进程fork一 个孙进
程后退出,那么孙进程被init接管,孙进程结束后, init会回收。不过子进程的回收 还要自己
做。
建议你使用第三种方法,父进程直接忽略子进程的结束,留给内核作回收处理。这样就不
会产生僵尸进程。

㈧ Linux 如何使用`wait`等待所有子进程退出,而不是等待第一个子进程退出.希望能给出代码片段

linux中的wait函数等到一个子进程退出就会返回,恢复到执行状态。要想等所有子进程退出可以用waitpid函数
pid_t wait(pid_t pid,int * status,int options);
pid>0时,只等待pid与该参数相同的子进程,如果该子进程一直没有退出,那么父进程会一直阻塞;
pid=0时,会等待同一个进程组的子进程,若子进程加入了其他进程组,waitpid()不再关心它的状态;
pid=-1时,waitpid()与wait()函数相同,将阻塞等待并回收一个子进程;
pid<-1时,会等待指定进程组的任何子进程,进程组的id等于pid的绝对值;

㈨ linux中 子进程异常退出怎么重启子进程

用父进程来监查,当子进程异常退出时,会发送SIGCHLD信号给父进程,父进程捕捉到信号后可以调用execl函数来重启这个程序

热点内容
一万级净化车间有哪些配置 发布:2025-05-15 12:16:41 浏览:97
javazip解压加密 发布:2025-05-15 12:15:02 浏览:941
dnf服务器存放什么信息 发布:2025-05-15 12:11:07 浏览:216
办公室视频剧本脚本 发布:2025-05-15 12:03:51 浏览:490
编译失败什么意思 发布:2025-05-15 11:58:18 浏览:87
lcs脚本官网 发布:2025-05-15 11:56:15 浏览:88
三国志战略版打9级矿什么配置 发布:2025-05-15 11:41:29 浏览:953
安卓加速器怎么关 发布:2025-05-15 11:38:16 浏览:465
密码锁坏了如何打开 发布:2025-05-15 11:30:19 浏览:838
怎样增加共享文件夹连接数量 发布:2025-05-15 11:24:50 浏览:962