一、linux常用信号
- SIGHUP
在介绍SIGHUP之前先介绍两个概念:进程组、会话
- 进程组
进程组就是一系列相互关联的进程集合,系统中的每一个进程也必须从属于某一个进程组;每个进程组中都会有一个唯一的 ID(process group id),简称 PGID;PGID 一般等同于进程组的创建进程的 Process ID,而这个进进程一般也会被称为进程组先导(process group leader),同一进程组中除了进程组先导外的其他进程都是其子进程
- 会话
会话(session)是一个若干进程组的集合,同样的,系统中每一个进程组也都必须从属于某一个会话;一个会话只拥有最多一个控制终端,该终端为会话中所有进程组中的进程所共用。和进程组先导类似,会话中也有会话先导(session leader)的概念,用来表示建立起到控制终端连接的进程。在拥有控制终端的会话中,session leader 也被称为控制进程(controlling process),一般来说控制进程也就是登入系统的 shell 进程(login shell)。
SIGHUP(hang up)挂断信号,在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联. 系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。
- SIGINT
SIGINT(interrupt)终止信号, 在用户键入INTR字符(通常是Ctrl+C)时发出,用于通知前台进程组终止进程。SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl+)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。
- SIGPIPE
在网络编程中,SIGPIPE这个信号是很常见的。当往一个写端关闭的管道或socket连接中连续写入数据时会引发SIGPIPE信号,引发SIGPIPE信号的写操作将设置errno为EPIPE。在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程(Broken pipe),告诉进程这个连接已经断开了,不能再写入数据。
二、nohup和&的区别
-
nohup
顾名思义忽略SIGHUP,关闭shell时程序不会中断,默认输出到nohup.out
-
&(后台运行)
忽略SIGINT信号,操作ctl+c程序不会中断
三、linux常用的标准文件
-
0表示stdin标准输入
-
1表示stdout标准输出
-
2表示stderr标准错误
-
/dev/null表示空设备文件,长叫“无地洞”
-
/dev/zero表示一个输入设备,可以无穷无尽的提供0。
if=/dev/zero of=./test.txt bs=1k count=1 #生产1k大小的文件
- ">"表示重定向,相当于1 >,默认1会省略
- 2>&1表示标准错误重定向到标准输出,&可以理解为引用
# t > log #因为t命令不存在,所以报错
-bash: t: command not found
# t > log 2>&1 #第一步:1重定向到log,第二步:2重定向到1,所以2就输出到log
# vi log
-bash: t: command not found
四、实践
nohup ./server > /dev/null 2>&1 &
1.后台运行./server服务,忽略输出和错误
2.最后的&是后台运行的意思

本文深入探讨了Linux系统中关键的信号类型,如SIGHUP、SIGINT、SIGPIPE的作用及应用场景,解析了nohup与后台运行的区别,并介绍了标准文件的概念及实践案例。

1128

被折叠的 条评论
为什么被折叠?



