进程知识点概要(一)

1.进程和进程

1.进程

​ 进程是一个存储在磁盘上某个目录种的可执行文档。内核使用exec函数(7个exec函数之一),将进程读入内存,并执行进程。

2.进程和进程ID

​ 进程的执行实例被称为进程(process).某些操作系统用任务(task)表示正在被执行的进程。UNIX系统确保每个进程都有一个唯一的数字标识符,称为进程ID,是一个非负整数。

3.进程控制

​ 有3个用于进程控制的主要函数:fork,exec和waitpid。

​ 下面看一个示例

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


int
main(void)
{
char buf[MAXLINE];
pid_t pid;
int status;

while(fgets(buf, MAXLINE, stdin) != NULL){
if(buf[strlen(buf) - 1]=='n')
buf[strlen(buf) - 1] = 0;
if((pid = fork()) < 0){
err_sys("fork error");
}else if (pid == 0){
execlp(buf, buf, (char*)0);
err_ret("couldn't execute: %s", buf);
exit(127);
大专栏  进程知识点概要(一)}


if((pid = waitpid(pid, &status, 0)) < 0)
err_sys("waitpid error");
}
exit(0);
}

上述进程很有参考价值

  • 调用fork创建一个新进程。新进程是调用进程的一个副本,我们称调用进程为父进程,新创建的进程是子进程。fork对父进程返回新的子进程的进程ID(一个非负整数),对于子进程则返回0.因为fork创建一个新进程,所以说它被调用一次(由父进程),但返回两次(分别在父进程和子进程中).
  • 在子进程中,调用execlp以执行从标准输入读入的命令。这就用新的进程文档替换了子进程原先执行的进程文档。fork和跟随其后的exec两者的组合就是某些操作系统所称的产生(spawn)一个新进程。在UNIX系统中,这两部分分离成2个独立的函数。
  • 子进程调用execlp执行新进程文档,而父进程希望等待子进程终止,这是通过调用waitpid实现的,其参数指定要等待的进程(即pid参数是子进程的ID)。waitpid函数返回子进程的终止状态(status变量)

4.信号

​ 信号用于通知进程发生了某种情况。例如,若某一进程执行除法操作,其除数为0,则将名为SIGFPE(浮点异常)的信号发送给该进程,进程有以下3种处理信号的方式

  • 忽略信号
  • 按系统默认方式处理
  • 提供一个函数,信号发生时调用该函数,这被称为捕捉该信号

2.进程环境

1.退出函数

1
2
3
4
5
#include<stdlib.h>
void (int status);
void _Exit(int status);
#include<unistd.h>
void _exit(int status);

main函数返回一个整型值与用该值调用exit等价。即main函数中

1
exit(0);等价于return(0);
原文地址:https://www.cnblogs.com/lijianming180/p/12014273.html