咱們使用ssh鏈接服務器以後,若是在執行某個命令須要時間特別長,當把終端斷掉以後,命令就自動中止了redis
通常咱們在ssh客戶端執行命令以後,默認他的父進程是ssh,因此把ssh終端關掉以後,子進程也就被自動kill掉了,解決辦法就是更改這個命令進程的父進程爲init,那樣ssh退出去以後,命令依然會運行bash
默認狀況下:服務器
[root@localhost ~]# ping 127.0.0.1 &>/dev/null &ssh
[1] 1782ide
[root@localhost ~]# pstreeserver
init─┬─VBoxService───7*[{VBoxService}]進程
├─abrtdget
├─acpidit
├─atdconsole
├─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───udevd
2.使用setsid setsid commond &
[root@localhost ~]# setsid 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───udevd
3.使用(), (commond &)
[root@localhost ~]# ( 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───udevd