1.bash进程:
pts(虚拟终端),一个虚拟终端连接到linux,就会出现一个bash进程(shell),用于解释用户输入的命令。
查看bash进程命令:
ps -ef | grep bash
bash:命令行解释器(shell是一个bash进程)
查看bash目录命令:
whereis bash
2.进程关系:
进程组:一个或者多个进程的集合,每个进程组有一个唯一的进程组ID,可以调用系统函数来创建和加入进程组。
会话(session):是一个或者多个进程组的集合。
一般来说,一个bash(shell)上边运行的所有程序都属于一个会话,而这个会话有一个session leader,通常就是session leader,可以调用系统函数创建新的session
详细查看进程命令:
ps -eo pid,ppid,sid,tty,pgrp,comm grep-E'bash|PID|nginx'
pid:进程id
ppid:父进程id
sid:会话id
tty:终端id
pgrp:进程组id
xshell终端断开,系统会发送SIGHUP信号(终端断开信号),给session leader(bash进程)
bash进程收到SIGHUP信号后,bash会把这个信号发送给session里边的所有进程,收到SIGHUP信号的进程的执行退出动作。
3.strace工具
strace:是一个linux下调试分析诊断工具,可以跟踪程序执行时进程的系统调用以及所收到的信号;
跟踪进程命令:
sudo strace trace=signal -p 1359
4.终端关闭时如何不让进程退出
1. 调用系统函数忽略信号:
包含头文件:
#include <signal.h>
调用函数:
signal(SIGHUP,SIG_IGN);
SIG_IGN表示忽略信号
2. 建立新的会话:
在进程中建立子进程调用系统函数(注意进程组组长调用无效),这样终端关闭时,会保留该子进程。
setsid();
3.使用终端命令:
- 设置新session:
setsid ./nginx
- 忽略SIGNHUP信号:
nohup ./nginx
该命令会把屏幕输出放到当前目录的nohup.out文件中
5.后台运行
./nginx -&
执行的同时,终端可以做其他事
fg切回前台运行
谢谢查看,本文主要用于本人学习复习使用,如有错误欢迎并感谢提出!