在linux系统中,默认情况下,当关闭ssh终端连接,随之启动的程序也会关闭。
原理分析: 那么,有没有办法,实现关闭ssh后,当前执行的进程仍继续运行呢?比如我们用wget命令批量下载上千个远程服务器上的文件时。
解决方法:
运行方法:
复制代码代码示例:
#nohup program &
现在正常关闭ssh后,服务依然继续运行。 当SecureCRT异常关闭后,后台进程一同关闭的现象罪魁祸首 Signup信号。 症状:使用SecureCRT工具ssh远程连接linux,不退出ssh,而是强行关闭终端(合上笔记本走人)情况下,后台启动的应用也会关闭。
测试案例:
一个简单的测试结果:
复制代码代码示例:
ping google.com | tee log.txt &
在第二个终端观察
复制代码代码示例:
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping | `-tee Ctrl+D 退出第一个终端 然后关闭终端
第二个终端的日志仍然在写,pstree命令:
复制代码代码示例:
|-ping
ps x 29427 ? S 0:00 ping google.com 看到ping的进程依然存在
2、后台执行程序,非正常关闭ssh连接(模拟突然掉电或者,未来得及退出ssh,或者ssh仍然连接,直接关闭终端SecureCRT)情况:
复制代码代码示例:
ping google.com | tee log.txt &
在第二个终端观察
复制代码代码示例:
|-sshd-+-sshd---sshd---bash---pstree
| `-sshd---sshd---bash-+-ping | `-tee
在不退出ssh的情况下,强行关闭第一个终端(SecureCRT)
复制代码代码示例:
kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH 29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN 35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4 39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8 43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6 59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2 63) SIGRTMAX-1 64) SIGRTMAX
列表中,编号为1 ~ 31的信号为传统UNIX支持的信号,是不可靠信号(非实时的),编号为32 ~ 63的信号是后来扩充的,称做可靠信号(实时信号)。不可靠信号和可靠信号的
SIGHUP信号在用户终端连接(正常或非正常)结束时发出, 通常是在终端的控制进程结束时, 通知同一session内的各个作业, 这时它们与控制终端不再关联。
附,secureCRT异常退出和执行exit的区别?
对于终端异常退出后,后台进程不关闭问题,有如下的解决办法:
简单介绍如下:
复制代码代码示例:
SCREEN vi /tmp/2hei.net
需要中断连接:
复制代码代码示例:
screen Ctrl+a d
查询screen进程:
复制代码代码示例:
ps x
20377 ? Ss 0:00 SCREEN vi /tmp/2hei.net 重连
复制代码代码示例:
screen -r 20377
(责任编辑:IT) |