我们使用ssh连接服务器之后,如果在执行某个命令需要时间特别长,当把终端断掉之后,命令就自动停止了一般我们在ssh客户端执行命令之后,默认他的父进程是ssh,所以把ssh终端关掉之后,子进程也就被自动kill掉了,解决办法就是更改这个命令进程的父进程为init,那样ssh退出去之后,命令依然会运行
默认情况下:
[root@localhost ~]# ping 127.0.0.1 &>/dev/null &[1] 1782[root@localhost ~]# pstreeinit─┬─VBoxService───7*[{VBoxService}]├─abrtd├─acpid├─atd├─auditd───{auditd}├─console-kit-dae───63*[{console-kit-da}]├─crond├─dbus-daemon├─dhclient├─hald───hald-runner─┬─hald-addon-acpi│ └─hald-addon-inpu├─master─┬─pickup│ └─qmgr├─6*[mingetty]├─redis-server───2*[{redis-server}]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash─┬─ping -------->从进程树中可以看出ping的父进程是ssh│ └─pstree└─udevd───udevd
解决办法:
1.使用nohup 即 nohup commond &[root@localhost ~]# nohup ping 127.0.0.1 &>/dev/null &查看进程:[root@localhost ~]# pstree init─┬─VBoxService───7*[{VBoxService}]├─abrtd├─acpid├─atd├─auditd───{auditd}├─console-kit-dae───63*[{console-kit-da}]├─crond├─dbus-daemon├─dhclient├─hald───hald-runner─┬─hald-addon-acpi│ └─hald-addon-inpu├─master─┬─pickup│ └─qmgr├─6*[mingetty]├─ping ---------->ping的父进程已经是init了├─redis-server───2*[{redis-server}]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───pstree└─udevd───udevd2.使用setsid setsid commond & [root@localhost ~]# setsid ping 127.0.0.1 &>/dev/null &查看进程;[root@localhost ~]# pstreeinit─┬─VBoxService───7*[{VBoxService}]├─abrtd├─acpid├─atd├─auditd───{auditd}├─console-kit-dae───63*[{console-kit-da}]├─crond├─dbus-daemon├─dhclient├─hald───hald-runner─┬─hald-addon-acpi│ └─hald-addon-inpu├─master─┬─pickup│ └─qmgr├─6*[mingetty]├─ping ---------->ping的父进程已经是init了├─redis-server───2*[{redis-server}]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───pstree└─udevd───udevd3.使用(), (commond &)[root@localhost ~]# ( ping 127.0.0.1 &>/dev/null & ) 查看进程树:[root@localhost ~]# pstreeinit─┬─VBoxService───7*[{VBoxService}]├─abrtd├─acpid├─atd├─auditd───{auditd}├─console-kit-dae───63*[{console-kit-da}]├─crond├─dbus-daemon├─dhclient├─hald───hald-runner─┬─hald-addon-acpi│ └─hald-addon-inpu├─master─┬─pickup│ └─qmgr├─6*[mingetty]├─ping ---------->ping的父进程已经是init了├─redis-server───2*[{redis-server}]├─rsyslogd───3*[{rsyslogd}]├─sshd───sshd───bash───pstree└─udevd───udevd