一般来说如果我们启动了一个A进程,然后通过A进程再启动B进程,那么A进程就是B进程的父进程,或者说B进程是A进程的子进程。

那么如果这个时候我们强杀了A进程之后,B进程会处于什么状态呢?是继续运行还是也退出了?

实际情况是这两种情况都有可能发生,取决A进程的状态。如果A进程是会话首进程,那么A退出后,B进程也会退出;反之如果A进程不是会话首进程,那么A退出后,B进程不会退出。

说到这,你可能懵逼了,什么是会话首进程,怎么看一个进程是不是会话首进程呢。

首先,每个进程都会属于一个进程组,每个进程组有个组长,组长的进程ID即是该进程组的ID。然后每个会话会拥有多个进程组,但是只会有一个前台进程组,其他的都是后台进程组。该前台进程组的ID即是这个会话的ID。也就是说如果一个进程是会话首进程,那么他的进程ID等于所在进程组的ID,也等于所在会话的ID。

那么怎么查询一个进程的ID以及会话ID呢,使用ps -eo pid,ppid,pgrp,session,comm命令。pgrp、session分别表示进程组合会话。

一般来说如果我们启动了一个A进程,然后通过A进程再启动B进程,那么A进程就是B进程的父进程,或者说B进程是A进程的子进程。那么如果这个时候我们强杀了A进程之后,B进程会处于什么状态呢?是继续运行还是也退出了?实际情况是这两种情况都有可能发生,取决A进程的状态。如果A进程是会话首进程,那么A退出后,B进程也会退出;反之如果A进程不是会话首进程,那么A退出后,B进程不会退出。说到这,你可能懵逼了,什么是会话首进程,怎么看一个进程是不是会话首进程呢。首先,每个进程都会属于一个进程组,每个进程组有个
文章目录前言一、僵尸 进程 1.1 僵尸 进程 的危害1.2 僵尸 进程 解决方案1.2.1 kill 杀死 元凶 进程 1.2.2 进程 用wait或waitpid去回收资源1.2.3 通过信号机制,在处理函数中调用wait,回收资源二、孤儿 进程 参考   在Unix/ Linux 系统中,正常情况下, 子进程 是通过 进程 创建的, 子进程 可以再继续创建新的 进程 。在 Linux 中,除了 进程 0(即PID=0的 进程 ,init 进程 )以外的所有 进程 都是由其他 进程 使用系统调用fork创建的,这里调用fork创建新 进程 进程 即为 进程 ,而相对
kill 正如这个单词的意思一样,就是 杀死 linux 系统中 kill 命令用来删除执行中的程序或工作。 kill 命令可将指定的信号发送给相应的 进程 或工作。 kill 命令默认使用信号为15,用于结束 进程 或工作。如果 进程 或工作忽略此信号,则可以使用信号9,强制 杀死 进程 或作业。 语法格式: kill [参数] [ 进程 号] 常用参数: 列出系统支持的信号 指定向 进程 发送的信号 处理当前 进程 时不限制命令名和 进程 号的对应关系 指定 kill 命令只打印相关 进程 进程 号,而不发送任何信号 列出系统支持的信号列表: [root@ linux cool ~]# ki
[root@qht2 ~]# ps -ef | grep httpd root 3799 1 0 10:41 pts/0 00:00:00 /usr/sbin/nss_pcache off /etc/httpd/alias root 3803 1 3 10:41 ? 00:00:00 /usr/sbin/httpd apache 3807 3803 0 10:41 ? 0 最近在鼓捣 jenkins 的时候,遇到了很多问题,这个问题搞的好难受,就是我写的项目启动脚本,在服务器本地可以执行,但是在jenkins上构建后执行,项目就启动不起来。 搞得我要裂开了,后来站在巨人的肩膀上,终于找到了解决方案!!! 问题发生的前提:你的 jenkins 所在的服务器和 你部署项目的服务器是同一台(我自己鼓捣所以就用了同一台,咱 们项目开发的时候,都是服务器分开的),所以咱们很少遇到这个问题。 正如题目写的,就是 jenkins 在构建结束之后,会 杀死 它创建的 子进程 ,所以你写的后台执行的脚本也会被 kill 掉。 # 在执行的脚本前边加入:不要杀 常用方式: ps aux :查看正在运行 进程 信息(主要查 pid)。 ps ajx :更加详细(PID、 PPID: 进程 id、 PGID: 进程 组 id、 SID:会话 di)。 一般过滤使用: ps aux | grep 关键字 。 例如: ps aux | grep a.out。 注意:有时会出现 2 个 进程 ,第一个是 进程 我们要查询的,第二个 进程 是 grep 进程 。 2、 kill 命令 kill 命令主要用于发信号给某个 进程 。 查看信号: kill -l
一、如何在 进程 中创建一个新的 进程 (fork函数) 1、pid_t fork(void); (1)fork函数与别的函数有所不同,它调用一次,返回两次。在新创建出来的 进程 中返回一次(返回值为 0),在原来的 进程 中返回一次(返回值为新 进程 的pid)。 (2)fork函数调用完成以后,两个 进程 都从fork之后开始执行。 (3)fork函数复制出新的 进程 后,两个 进程 成为独立的个体,互相不影响,各自执行。并...
中景园电子0.96OLED显示屏_C51系列测试程序 IIC_例程+SPI_例程工程源码: 中景园电子0.96OLED显示屏_C51系列_IIC_例程推荐使用 中景园电子0.96OLED显示屏_C51系列_IIC_例程推荐使用.zip 中景园电子0.96OLED显示屏_C51系列_IIC应答_例程 中景园电子0.96OLED显示屏_C51系列_IIC无应答_例程 中景园电子0.96OLED显示屏_C51系列_SPI_例程
进程 是一个操作系统对正在运行的程序的一个抽象, 进程 是操作系统中最核心的概念。很多的内容都需要围绕 进程 来完成。 进程 是操作系统进行资源分配的最小单位。 一个 进程 包括 程序(以适当形式记录的算法) 输入 输出 状态。 进程 的创建 4种主要事件会导致 进程 的创建 (1).系统初始化 (2)正在运行的程序执行了创建 进程 的系统调用 (3)用户请求创建一个新 进程 (4)一个批处理作业的初始化 进程 的终止 引起 进程 终止的4个原因 (1).正常退出(自愿的) (2)出错退出(自愿的) (3)严重错误(非自愿) (4)被其
kill -9 命令是强制结束 进程 的命令。一般来说,它可以成功地 杀死 一个 进程 ,但有些情况下,它无法 杀死 子进程 ,其中可能包括以下几个原因: 1. 子进程 正在执行一个系统调用,而该系统调用无法被中断。比如,一个 子进程 正在等待一个被锁定的资源,而这个锁定操作无法被中断。 2. 子进程 已经挂起了,而 进程 没有调用 wait() 函数来等待它结束。在这种情况下, 进程 已经终止了, 子进程 被转交给了 init 进程 ,但 init 进程 也没有调用 wait() 函数来等待它结束,导致无法被 杀死 。 3. 子进程 没有被正确地启动。比如, 子进程 传递给 进程 的 PID 是错误的,或者 进程 因为程序错误而没有正确地启动 子进程 。 4. 子进程 已经成为孤儿 进程 (即其 进程 已经终止),但它正在执行一些重要任务,导致系统无法 杀死 它。 5. 子进程 正在执行一些危险操作,如修改系统资源,向其他 进程 发送信号等,导致系统无法 杀死 它。