进程替换和信号
十一.进程替换和信号
1.什么是进程替换
把当前进程替换为其他进程执行。其他进程(创建新程序,生成可执行程序,装载进内存)
pcb不变,进程实体替换
2.进程替换的函数
头文件<unistd.h>
l->把参数列举出来
v->把参数封装到数组里
2.1 execl
用法:execl(“命令的路径”,“命令的参数”,(char*)NULL);
注:(char*)NULL和(char*)0都为结束符。
代码:
int main()
{
printf("main pid=%d\n",getpid());
execl("/usr/bin/ps","-f",(char*)NULL);
perror("exec error\n");
exit(0);
}
运行结果:
小补充:
函数perror():可以告诉错误原因
2.2 execlp
自动匹配系统路径,不需要指定路径,只需要传递文件名。
用法:execlp(“命令名”,“参数”,(char*)0);
用户自定义路径复制到$PATH路径下:
export 变量名=值
ex:export PATH=$PATH:.
2.3 execle
用法:execle(“/usr/bin/pwd”,“pwd”,(char*)0,envp) envp是main函数的形参
2.4 execv
将命令的参数封装到数组中
用法:char*buff[]={“ps”,“-f”,“0”}; execv(“usr/bin/ps”,buff);
2.5 execvp
自动匹配系统路径,不需要指定路径,只需要传递文件名
2.6 execve(系统调用函数)
用法:execve(“/usr/bin/ps”,buff,envp);
3.信号
3.1 概念
信号是系统相应某个条件而产生的事件,进程接收到信号会执行相应的操作。
头文件:<signal.h>
3.2 各种信号
3.2.1 SIGINT 2
终止前台进程
键盘按下Ctrl+c时会产生该信号
3.2.2 SIGKILL 9
强制终止进程
该信号的响应方式不允许改变
3.2.3 SIGPIPE 13
读端关闭的描述符,写端写入时产生,该信号会终止程序
3.2.4 SIGTERM 15
系统kill命令默认发送的信号
3.2.5 SIGCHLD 17
子进程结束后,会默认给父进程发送该信号