linux进程永久放后台运行

Posted FuZZ

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了linux进程永久放后台运行相关的知识,希望对你有一定的参考价值。

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

默认情况下:

[[email protected] ~]# ping 127.0.0.1 &>/dev/null  &

[1] 1782

[[email protected] ~]# 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 &

[[email protected] ~]# nohup ping 127.0.0.1 &>/dev/null  &

查看进程:

[[email protected] ~]# 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 &  

[[email protected] ~]# setsid ping 127.0.0.1 &>/dev/null &

查看进程;

[[email protected] ~]# 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 &)

[[email protected] ~]# ( ping 127.0.0.1 &>/dev/null & ) 

查看进程树:

[[email protected] ~]# 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

 

以上是关于linux进程永久放后台运行的主要内容,如果未能解决你的问题,请参考以下文章

Linux shell中运行命令后加上字符“&”的作用

linux进程的挂起和恢复

linux下ping加时间戳实时输出到文件 放后台运行

Linux 进程后台运行

linux怎么查询nohup的进程

linux中如何把一个进程放在后台运行