(2.1)终端和进程的关系
(1.1)终端与bash进程
//ps -ef | grep bash
//pts(虚拟终端),每连接一个虚拟终端到乌班图linux操作系统,
//就会出现 一个bash进程(shell[壳]),黑窗口,用于解释用户输入的命令
//bash = shell = 命令行解释器
//whereis bash
(1.2)终端上的开启进程
//ps -la
//man ps
//随着终端的退出,这个终端上运行的进程nginx也退出了;
//可执行程序nginx是bash的子进程;
//《unix环境高级编程》第九章 进程关系;
(1.3)进程关系进一步分析
//每个进程还属于一个进程组:一个或者多个进程的集合,每个进程组有一个唯一的进程组ID,可以调用系统 函数来创建进程组、加入进程组
//“会话”(session):是一个或者多个进程组的集合
//一般,只要不进行特殊的系统函数调用,一个bash(shell)上边运行的所有程序都属于一个会话,而这个会话有一个session leader;
//那么这个bash(shell)通常就是session leader;
你可以调用系统功函数创建新的session。 //ps -eo pid,ppid,sid,tty,pgrp,comm | grep -E 'bash|PID|nginx' //a)如果我 xshell终端要断开的话,系统就会发送SIGHUP信号(终端断开信号),给session leader,也就是这个bash进程
//b)bash进程 收到 SIGHUP信号后,bash会把这个信号发送给session里边的所有进程,收到这个SIGHUP信号的进程的缺省动作就是退出;
(1.4)strace工具的使用
//linux下调试分析诊断工具:可以跟踪程序执行时进程的系统调用以及所收到的信号;
//a)跟踪nginx进程:sudo strace -e trace=signal -p 1359//kill(4294965937, SIGHUP):发送信号SIGHUP给这个 -1359的绝对值所在的进程组;所以nginx进程就收到了SIGHUP信号
//综合来讲,这个bash先发送SIGHUP给同一个session里边的所有进程;
//然后再发送SIGHUP给自己;//int abc = 4294965937;
//-1359
(1.5)终端关闭时如何让进程不退出
//设想
//a)nginx进程拦截(忽略)SIGHUP(nginx收到这个信号并告诉操作系统,我不想死,请不要把我杀死)信号,是不是可以;
//b)nginx进程和bash进程不再同一个seeion里;
//孤儿进程
//setsid函数不适合进程组组长调用; //setsid命令:启动一个进程,而且能够使启动的进程在一个新的session中,这样的话,终端关闭时该进程就不会退出,试试
//setsid ./nginx //nohup(no hang up不要挂断),用该命令启动的进程跟上边忽略掉SIGHUP信号,道理相同
//该命令会把屏幕输出重新定位到当前目录的nohup.out //ps -eo pid,ppid,sid,tty,pgrp,comm,cmd|grep -E 'bash|PID|nginx'
(1.6)后台运行 &
//后台执行,执行这个程序的同时,你的终端能够干其他事情;你如果不用 后台执行,那么你执行这个程序后
//你的终端就只能等这个程序完成后才能继续执行其他的操作;
//fg切换到前台
【(2.1)终端和进程的关系】
推荐阅读
- C语言|C语言求输入字符的字母和数字个数
- 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
- C#.NE在线考试开发文件和源代码
- mongodb的使用和分桶
- 你应该知道的Redis过期键和过期策略
- 菜鸟刷题|蓝桥杯每日一题——最大字段和问题(动态规划)
- 开发|leetcode112 路径总和
- Python进行多输出(多因变量)回归(集成学习梯度提升决策树GBR回归训练和预测可视化)
- 不仅仅是一把瑞士军刀|不仅仅是一把瑞士军刀 —— Apifox的野望和不足
- BFS和DFS的差别|BFS和DFS的差别 BFS实现迷宫最短路径