Linux 进程(Process)

程序program)是一个普通文件,是为了完成特定任务而准备好的指令序列数据的集合,这些指令和数据以可执行映像的格式保存在磁盘中。进程process)是一个已经开始执行但还没终止的程序实例
程序是个静态的文件,进程是一个动态的实体。

1、进程ID

每个进程在创建时,内核都会为之分配一个进程IDProcess ID,简称PID)用来标识当前的进程,进程ID是一个类型为pid_t整数,并保持同一时刻是唯一值,它最大值为pid_max值(默认为32768,可修改)。当进程退出时,它的进程ID可回收循环使用。
Linux 系统getpid()函数可以获取当前进程进程ID

2、父进程与子进程

进程创建时,创建进程为新进程的父进程新进程是创建进程的子进程。在子进程中可以使用getppid()函数获取父进程的PID

3、创建进程

fork()函数从运行着进程中分裂出一个子进程,它通过拷贝父进程的方式创建子进程子进程父进程有相同的代码空间文件描述符等资源。

Linux 进程(Process)_第1张图片

进程创建后,子进程父进程开始并发执行,执行顺序由内核调度算法来决定。
fork()函数如果成功创建了进程,就会对父子进程各返回一次,其中对父进程返回子进程的PID,对子进程返回0失败则返回小于0错误码

4、终止进程

进程终止可分为正常终止异常终止两大类:
序号 终止方式 具体方法
1 正常终止 (1)从main()函数return返回;
(2)调用类exit()函数。
2 异常终止 (1)调用abort()函数;
(2)接收到一个SIGABRT信号终止。

5、守护进程

守护进程Daemon)是运行在后台的一种特殊进程。它独立于控制终端并且周期性地执行某种任务等待处理某些发生的事件,它不需要用户输入就能运行并提供某种服务。
守护进程父进程init进程,因为它真正的父进程fork出该子进程后就先于该子进程exit退出了,所以它是一个由init领养孤儿进程
Linux 系统的大多数服务器就是通过守护进程实现的,且通常以字母d结尾来命名进程名,比如sshdxinetdcrond等。
Linux 系统有多种创建守护进程的方法,其中最常用的是使用daemon()函数来创建守护进程daemon()函数的原型如下:
#include 
int daemon(int nochdir , int noclose);

(1)参数nochdir:如果传入0,则daemon函数将调用进程的工作目录设置为根目录,否则保持原有的工作目录不变
(2)参数noclose:如果传入0,则daemon函数会将标准输入标准输出标准错误重定向到/dev/null文件中,否则不改变这些文件描述符

该函数如果成功则返回0,否则返回-1,并设置errno

你可能感兴趣的:(Linux)