进程控制之孤儿进程

#include<stdio.h>

#include<sys/types.h>

#include<sys/wait.h>

#include<unistd.h>

#include<signal.h>

int main( void )

{

daemon_init();

fprintf(stderr, "main进程[%d]\n", getpid() );

while( 1 )

{

}

exit(0);

}

int daemon_init()

{

pid_t pid;

if( getppid() == 1 )

{

umask( 0 );

return 0;

}

if( (pid = fork()) < 0 )

{

fprintf(stderr, "fork err!\n");

return -1;

}

else if( pid > 0 )

{

fprintf( stderr, "结束进程[%d]\n", getpid() );

exit( 0 );

}

fprintf( stderr, "孤儿进程[%d]\n", getpid() );

signal( SIGHUP, SIG_IGN );

signal( SIGQUIT, SIG_IGN );

signal( SIGCHLD, SIG_IGN );

setsid();

umask( 0 );

return 0;

}

进程控制之孤儿进程

时间: 2024-10-24 13:45:33

进程控制之孤儿进程的相关文章

进程控制、孤儿进程和僵尸进程

一.进程控制 1.进程标识 1.操作系统里每打开一个进程都会创建一个进程ID,这是唯一标识进程的编号,即PID. 2.PID 在任何时刻都是唯一的,但是可以重用.当进程终止并被回收以后,其 PID 就会被系统回收 3.进程的 PID 由系统内核根据延迟重用算法生成,以确保新进程的 PID 不同于最近终止进程的 PID. 4.进程PID的最大值是有限的(因系统的不同而不同),需要及时回收 2.特殊进程 0 号进程:通常是调度进程,常常被称为交换进程(swapper).该进程是内核的一部分,所有进程

进程控制(六)---孤儿进程和僵尸进程

考虑下面两种情况: 第一种:父进程 先于 子进程 退出. 发生此种情况的时候,子进程便成为 孤儿进程.系统中的所有孤儿进程都会被 init 进程领养,init 进程的进程 ID 始终为 1.系统内当有进程终止的时候,内核会去检查所有的进程是否为该终止进程的子进程,如果是,则将其父进程 ID 修改为 1,即被 init 进程领养.init 进程保证会去 wait 每个子进程的退出.这样一来,就可以保证系统内的所有进程都有父进程.当一个孤儿进程被 init 进程领养的时候,孤儿进程将会由前台进程转为

Linux进程学习(孤儿进程和守护进程)

孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid =  fork();if(pid > 0) {         

进程控制(一)---PCB(进程控制块)

 进程是对程序的动态描述,是操作系统进行资源分配的最小单位(线程是操作系统执行实体的最小单位). 对于多道程序系统来说,其内存中可能存在着很多个进程,为了方便管理这些进程,操作系统内核为每个被创建的进程都建立一个结构体来保存与其相关的信息.这个结构体就是PCB,也就是进程控制块,进程控制块存在于进程的高 1 G空间,也就是内核空间中.在具体linux内核实现中,使用一个名为task_struct的结构体来描述的,在内核/include/linux/sched.h头文件中有具体定义. 操作系统组织

进程控制(十四)---进程组

在Linux系统中,每个进程都会属于一个进程组,而每个进程组都有一个进程组ID(pgid),这个进程组ID的值等于组长进程的进程ID.通常在shell下执行的第一个程序将成为一个组长进程,其后生成的所有与此进程有血缘关系的进程都属于此进程组(除非子进程使用setpgid函数改变自己的进程组ID). ======================================================= Linux系统提供了 getpgrp 函数和 getpgid 函数来读取进程的进程组 I

进程控制(1):进程标识符

进程标识符(PID)是一个进程的基本属性,其作用类似于每个人的身份证号码.根据进程标识符,用户可以精确地定位一个进程.一个进程标识符唯一对应一个进程,而多个进程标识符可以对应同一个程序.本文将深入探讨进程标识符及其相关操作. 1 进程标识符 每个进程在系统中都有唯一的一个ID标识它,这个ID就是进程标识符(PID).因为其唯一,所以系统可以根据它准确定位到一个进程.进程标识符的类型为pid_t,其本质上是一个无符号整型的类型别名(typedef). 接下来,我们来简单介绍一个进程与程序的关系.所

进程控制(十一)---更改进程的用户ID和组ID

Linux提供了setuid函数和seteuid函数来更改与进程相关的用户ID,和进程相关的用户ID有“实际用户ID.有效用户ID和保存的设置用户ID” ====================================================== 函数原型: 函数参数: uid:要设置的用户ID 返回值: 调用成功时返回 0 调用失败时返回 -1 ==================================================== 当进程的有效用户ID是roo

(待续)进程控制(四)---父子进程之间的复制

用户缓冲区: 由 fork函数创建的子进程会继承父进程的用户缓冲区.如果在父进程调用 fork 函数创建子进程之前缓冲区中仍然有数据在其中的话,那么子进程将会复制父进程的缓冲区. 文件共享: 由 fork 函数创建的子进程会继承父进程打开的所有文件描述符,而且父子进程相同的文件描述符是指向同一个文件表项(共享一个读写偏移指针).IPC(进程间通信)中的 无名管道 就是利用子进程会继承父进程的文件描述符这一特点来实现的.

(转)进程间关系:进程、僵尸进程、孤儿进程、进程组、前台进程组、后台进程组、孤儿进程组、会话、控制终端

不同的shell对使用管道线时创建子进程的顺序不同,本文以bash为例,它是支持作业控制的shell的典型代表. 僵尸进程与孤儿进程 僵尸进程:先于父进程终止,但是父进程没有对其进行善后处理(获取终止子进程有关信息,释放它仍占有的资源).消灭僵尸进程的唯一方法是终止其父进程.孤儿进程:该进程的父进程先于自身终止.其特点是PPID=1(init进程的ID).一个孤儿进程可以自成孤儿进程组. 文中用到的缩写 PID = 进程ID (由内核根据延迟重用算法生成)PPID = 父进程ID(只能由内核修改