sapser's blog

Standing on the shoulders of Giants

关闭终端而不终止后端进程的几种方法总结

Aug 6, 2014 • shell


经常在一个终端上将一些长时间运行的进程放在后端跑,但是当终端关闭后,这个后端进程也随之关闭了,这是咋回事呢。

简单来说就是一个ssh连接(开一个终端)会创建一个session,然后在终端上开启的进程都属于这个session,如果关闭终端(关闭ssh连接),系统会向这个session发送SIGHUP信号,终止这个session下的所有进程。

那么解决这个问题的方法也就很明显了,要么是进程忽略SIGHUP信号,要么是将进程放到一个新的session中,下面给出目前了解到的几种解决方法:

1、使用nohup命令忽略SIGHUP信号

$ nohup cmd & 


2、使用trap命令忽略SIGHUP信号,通过kill -l可以看到SIGHUP信号对应数字1

$ trap '' 1 && cmd &


3、使用setsid命令让进程跑在新session中,进程自然不会接收到SIGHUP信号了

$ setsid cmd &


4、使用screentmux来让进程跑在新session中,这个就不详解了,具体google这两个工具的用法



上一篇:watchdog--监控文件系统变化

下一篇:awk '!a[$0]++'去重原理分析