linux程序后台运行详解

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

一、linux常用信号

  1. 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信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。

  1. SIGINT

​ SIGINT(interrupt)终止信号, 在用户键入INTR字符(通常是Ctrl+C)时发出,用于通知前台进程组终止进程。SIGQUIT和SIGINT类似, 但由QUIT字符(通常是Ctrl+)来控制. 进程在因收到SIGQUIT退出时会产生core文件, 在这个意义上类似于一个程序错误信号。

  1. SIGPIPE

​ 在网络编程中,SIGPIPE这个信号是很常见的。当往一个写端关闭的管道或socket连接中连续写入数据时会引发SIGPIPE信号,引发SIGPIPE信号的写操作将设置errno为EPIPE。在TCP通信中,当通信的双方中的一方close一个连接时,若另一方接着发数据,根据TCP协议的规定,会收到一个RST响应报文,若再往这个服务器发送数据时,系统会发出一个SIGPIPE信号给进程(Broken pipe),告诉进程这个连接已经断开了,不能再写入数据。

二、nohup和&的区别

  1. nohup

    顾名思义忽略SIGHUP,关闭shell时程序不会中断,默认输出到nohup.out

  2. &(后台运行)

​ 忽略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.最后的&是后台运行的意思
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值