查看进程的Linux命令
1. ps -aux
查看系统中所有进程的信息和状态
PID:进程的id号
PPID:父进程ID号
父进程:创建新进程的进程称父进程
子进程:创建出来的新进程
ps -aux | grep a.out
组合命令:
| 管道:将前面的输出作为后面的输入
grep : 查找匹配
2. top
动态查看当前系统进程状态及CPU/内存占有率
3. ps -ef
查看进程状态信息和父子进程ID号
4. pstree
查看进程间的关系
pstree -p
查看进程间的关系(带ID号)
pstree -sp 进程ID
查看某个进程的关系图
5. kill
给进程发送信号
kill -l
查看系统定义的信号
kill -信号编号/信号名称 接收信号的进程ID
6. jobs
产看后台进程编号(当前终端)
fg 后台编号
将进程调到前台
Linux进程相关函数
pid_t fork(void);
功能:通过拷贝父进程产生一个新的子进程
拷贝父进程0-3G的虚拟内存
内核中拷贝父进程的PCB块,更新自己的PID号
父进程和子进程用户空间互相独立,数据不共享。
参数:
返回值:
成功:父进程:子进程的pid号
子进程:0
失败:-1
pid_t getpid(void);
获取当前自己进程的ID号
pid_t getppid(void);
获取自己的父进程的ID号
进程的消亡
1. 进程退出
1. 从main函数return
2. exit, _exit, _Exit
exit :退出进程会刷新缓冲区
_exit, _Exit: 系统调用,退出进程不会刷新缓冲区
3. 被动结束:信号结束
2. 进程资源回收
僵尸进程:进程已结束,但其资源空间未被其父进程回收。
如何避免僵尸进程:
1. 子进程结束,其父进程使用wait/waitpid回收资源空间
2. 让子进程成为一个孤儿进程,孤儿进程会被系统中的进程收养,由系统进程负责回收。
孤儿进程:父进程先消亡,由该父进程产生的子进程成为孤儿进程,将会被系统进程所收养。
守护进程
相关函数
void exit(int status);
功能:退出一个进程
参数:
status:退出时的状态值(可以传递个父进程)
EXIT_SUCCESS: 0 --->一切正常 退出
EXIT_FAILURE : 1---》当进程发生错误,主动退出
pid_t wait(int *wstatus);
功能:阻塞回收子进程空间和退出时状态
参数:
wstatus:需要保存的回收的子进程状态值的地址
NULL :不保存状态
返回值:
成功:返回回收到的子进程的ID号
失败:-1
wait(NULL);
pid_t waitpid(pid_t pid, int *status, int options);
功能:回收指定进程的资源
和wait功能相似,比wait更灵活
参数:
pid:
<-1 回收指定进程组内的任意子进程 (-100.等待GID=100的进程组中的任意子进程)
-1 回收任意子进程,组内外
0 回收和当前调用waitpid一个组的所有子进程,组内
> 0 回收指定ID的子进程
status 子进程退出时候的状态,
如果不关注退出状态用NULL;
options 选项:
0 表示回收过程会阻塞等待
WNOHANG 表示非阻塞模式回收资源。
返回值: 成功 返回接收资源的子进程pid
失败 -1
设定为非阻塞且没有回收到子进程返回0
waitpid(-1,&status,0) //默认阻塞 ==wait(&status);
非阻塞方式+轮询方式:
waitpid:父进程有自己的任务执行。
waitpid(-1, NULL, WNOHANG);