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

时间: 2024-10-06 23:02:24

linux进程不受终端影响的相关文章

【LINUX】 会话 进程组 作业 终端

[进程组]  进程组是一个或多个进程的集合.每个进程除了有一个进程ID之外,还属于一个进程组.  每个进程组有一个唯一的进程组ID.每个进程组都可以有一个组长进程. 组长进程的进程组ID等于其进程ID.进程组是否存在和有无组长无关. 每个进程都是属于进程组的,没有独立的进程,除非该进程组中只有一个进程,则可以说这个进程是独立的. 组长进程可以创建一个进程组,创建该组中的进程,然后终止. 但是只要有一个进程存在,则这个进程组就存在,这与其组长进程是否终止无关. 通常,它们与同一作业相关联,可以接收

linux 进程 进程组 作业 会话 控制终端

linux 进程 进程组  会话 控制终端 这几个很容易搞昏,记录一下,防止忘记 1 进程 个人理解 进程就是一段内存中运行的程序 pid 是进程ID 2 进程组 顾名思义,就是一组进程,他们之间不是孤立的,肯那个存在父子 或进程关系,注意linux 下进程是树状组织,  每个进程一定属于一个进程组,也只能属于一个进程组,进程组里面有多个进程  每个进程组都有一个leader,领导进程的PID 就是集成组ID 即 PGID eg: ps -o pid,pgid,ppid,sid,comm  |

六、Linux进程控制

1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别. 程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度和消亡的过程,是Linux的基本调度单位. 那么从系统的角度看如何描述并表示它的变化呢?在这里,是通过进程控制块(PCB)来描述的.进程控制块包含了进程的描述信息.控制信息以及资源信息,它是进程的一个静态描述. 内核使用进程来控制对CPU和其他系统资源的访问,并且使用进程来决定在CPU上运行哪个程

Linux进程间的通信

一.管道 管道是Linux支持的最初Unix IPC形式之一,具有以下特点: A. 管道是半双工的,数据只能向一个方向流动: B. 需要双工通信时,需要建立起两个管道: C. 只能用于父子进程或者兄弟进程之间(具有亲缘关系的进程): D. 单独构成一种独立的文件系统:管道对于管道两端的进程而言,就是一个文件,但它不是普通的文件,它不属于某种文件系统,而是自立门户,单独构成一种文件系统,并且只存在与内存中. 匿名管道的创建:该函数创建的管道的两端处于一个进程中间,在实际应用中没有太大意义;因此,一

Linux进程控制(三)

1. 进程间打开文件的继承 1.1. 用fork继承打开的文件 fork以后的子进程自动继承了父进程的打开的文件,继承以后,父进程关闭打开的文件不会对子进程造成影响. 示例: #include <stdio.h> #include <fcntl.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> int main() { char szBuf[32] = {'\0

linux 进程组 作业 会话

   进程组,作业,会话1. 进程组      每个进程除了有一个进程ID之外,还属于一个进程组.进程组是一个或多个进程的集合.      通常,它们与同一作业相关联,可以接收来自同一终端的各种信号. 每个进程组有一个唯一的进程组ID.每个进程组都可以有一个组长进程.组长进程的标识是其进程组ID等于其进程ID.组长进程可以创建一个进程组,创建该组中的进程,然后终止. 只要在某个进程组中一个进程存在,则该进程组就存在,这与其组长进程是否终止无关.2.作业     Shell分前后台来控制的不是进程

Linux进程学习(孤儿进程和守护进程)

孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid =  fork();if(pid > 0) {         

Linux进程学习 - 孤儿进程和守护进程

孤儿进程和守护进程 通过前面的学习我们了解了如何通过fork()函数和vfork()函数来创建一个进程.现在 我们继续深入来学习两个特殊的进程:孤儿进程和守护进程 一.孤儿进程 1.什么是 孤儿进程如果一个子进程的父进程先于子进程 结束, 子进程就成为一个孤儿进程,它由 init 进程收养,成为 init 进程的子进程.2.那么如何让一个进程变为一个孤儿进程呢?我们可以先创建一个进程,然后杀死其父进程,则其就变成了孤儿进程.pid =  fork();if(pid > 0) {         

第一次作业:基于Linux进程模型分析

一.关于线程和进程 1.进程  进程是指在系统中正在运行的一个应用程序 2.线程 线程是系统分配处理器时间资源的基本单元,或者说进程之内独立执行的一个单元 3.进程与线程的关系  · 对于操作系统而言,其调度单元是线程.一个进程至少包括一个线程,通常将该线程称为主线程. · 一个进程从主线程的执行开始进而创建一个或多个附加线程,就是所谓基于多线程的多任务 · 一个线程可以创建和撤销另一个线程;同一个进程中的多个线程之间可以并发执行. · 相对进程而言,线程是一个更加接近于执行体的概念,它可以与同