linux进程永久放后台运行

我们使用ssh连接服务器之后,如果在执行某个命令需要时间特别长,当把终端断掉之后,命令就自动停止了一般我们在ssh客户端执行命令之后,默认他的父进程是ssh,所以把ssh终端关掉之后,子进程也就被自动kill掉了,解决办法就是更改这个命令进程的父进程为init,那样ssh退出去之后,命令依然会运行

默认情况下:

[root@localhost ~]# ping 127.0.0.1 &>/dev/null  &

[1] 1782

[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]

     ├─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

 

posted @ 2018-04-07 19:06  Fuzengjie  阅读(3636)  评论(2编辑  收藏  举报