首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否在父fish shell进程终止后立即终止子进程?

在父fish shell进程终止后,子进程是否立即终止取决于子进程的终止条件和父进程的终止方式。

一般情况下,当父进程终止时,子进程会继续运行,直到它们完成任务或者被其他方式终止。这是因为子进程是独立于父进程的,它们有自己的进程ID和资源。

然而,有一些情况下子进程会在父进程终止后立即终止:

  1. 子进程是父进程的子进程组的一部分,并且父进程使用了setpgid()函数将子进程组ID设置为与父进程不同的值。在这种情况下,当父进程终止时,会向子进程组发送一个SIGHUP信号,这会导致子进程终止。
  2. 子进程是父进程的会话的一部分,并且父进程使用了setsid()函数创建了一个新的会话。在这种情况下,当父进程终止时,会向整个会话发送一个SIGHUP信号,这会导致子进程终止。

需要注意的是,这些行为是操作系统的默认行为,具体的实现可能会有所不同。此外,如果子进程被设置为忽略SIGHUP信号或者使用了其他方式处理该信号,那么子进程可能不会立即终止。

总结起来,一般情况下,在父fish shell进程终止后,子进程会继续运行,除非子进程是父进程的子进程组的一部分或者父进程创建了一个新的会话。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Fork进程是否进程共享stdio?

今天想到一个问题:如果我代码里面,fork当前进程,然后两个进程都执行scanf(),那会发生什么?键盘输入的数据是定向到哪个进程呢?...scanf("%c\n", &c); printf("parent process: %c\n", c); } } } 根据上面这串代码,进程和子进程都会调用...运行之后,当我控制台输入字符,输出如下: running... parent process, child=33781 2 parent process: 2 parent process: 3...process: 4 child process: 5 parent process: 5 parent process: 6 child process: 6 child process: 可以看到,进程和子进程都读取了键盘的数据...具体是哪一个进程获取到数据,则与进程调度有关。这提醒了我一点:多个进程同时读取同一个stdin的话,会造成获取到的数据不完整的问题。(这与stdin默认为tty这样的字节设备的特性有关)

16820
  • Python标准库06 子进程 (subprocess包)

    使用subprocess包中的函数创建子进程的时候,要注意: 1) 创建子进程之后,进程是否暂停,并等待子进程运行。 2) 函数返回什么 3) 当returncode不为0时,进程如何处理。...当我们想要更个性化我们的需求的时候,就要转向Popen类,该类生成的对象用来代表子进程。 与上面的封装不同,Popen对象创建,主程序不会自动等待子进程完成。...www.google.com"]) print("parent process") 从运行结果中看到,进程开启子进程之后并没有等待child的完成,而是直接运行print。...,比如我们上面例子中的child对象: child.poll()           # 检查子进程状态 child.kill()           # 终止子进程 child.send_signal...()    # 向子进程发送信号 child.terminate()      # 终止子进程进程的PID存储child.pid 子进程的文本流控制 (沿用child子进程) 子进程的标准输入,

    2.8K60

    计算机发展史与进程

    ') 主进程 任务开始执行 任务已经结束 join方法 作用:告诉操作系统,让子进程结束进程结束。...检查子进程是否存活的方法 子进程.is_alive() 返回的是bool值True or False 终止子进程的方法 子进程.terminate() 让操作系统强行终止子进程 from multiprocessing...True True jason start... 8988 jason over.. 8988 加入终止子进程程序 from multiprocessing import Process import...# 判断子进程是否存活 print(p.is_alive()) p.join() # 告诉操作系统,等子进程结束进程再结束。...,这样就无法得到正确的打印接过了 # 判断子进程是否存活 print(p.is_alive()) p.join() # 告诉操作系统,等子进程结束进程再结束。 ​

    61910

    Linux wait() 和 waitpid()函数介绍

    现在要知道调用wait或waitpid的进程可能会发生什么情况:  如果其所有子进程都在运行,则阻塞。 如果一个子进程已经终止,正在得带的进程获取到终止状态,则取得该子进程终止状态立即返回。...当程序运行的时候明显的可以看到输出最后一行 的时候等待了三秒钟。也就是进程等待子进程的结束。进程才能扑捉子进程,然后得到wait要得到的结果。...Pid<-1等待其组ID等于pid绝对值的任一子进程。 Waitpid返回终止子进程进程ID。并将该子进程终止状态存放在有status指向的存储单元中。...Waitpid可等待一个特定的进程,而wait则返回任一个终止子进程的状态。 Waitpid提供了yigewait费阻塞版本。有时候用户希望取得一个子进程的状态,但不想阻塞。...从结果中,我们看到进程一直等待子进程的结束。

    2.4K50

    Linux系统-进程控制

    exit函数 3)main函数return 4)异常退出 3、理解终止 三、进程等待 1、等待方法 2、获取status 3、理解等待 四、进程替换 1、替换原理 2、替换方法 五、实现简易shell...定义了进程终止状态,进程通过wait来获取该值 虽然status是int,但是仅有低8位可以被进程所用 注:_exit(-1)时,终端执行$?...,以此获取子进程退出的信息 使用对应的宏可以查看我们需要的退出信息:WIFEXITED(status): 若为正常终止子进程返回的状态,则为真(查看进程是否是正常退出);WEXITSTATUS(status.../waitpid会立即返回,并且释放资源,获得子进程退出信息 如果在任意时刻调用wait/waitpid,子进程存在且正常运行,则进程可能阻塞 如果不存在该子进程,则立即出错返回 示图:...如果传递变量地址,操作系统会根据该参数将子进程的退出信息反馈给进程 使用对应的宏可以方便查看我们需要的退出信息:WIFEXITED(status): 若为正常终止子进程返回的状态,则为真(查看进程是否是正常退出

    1.5K30

    【Linux】Linux进程控制>进程创建&&进程终止&&进程等待&&进程程序替换

    fork代码,内核做: 分配新的内存块和内核数据结构给子进程进程部分数据结构内容拷贝至子进程 添加子进程到系统进程列表当中 fork返回,开始调度器调度 当一个进程调用fork之后,就有两个二进制代码相同的进程...例如子进程从fork返回,调用exec函数 1.4 fork调用失败的原因 、 系统中有太多的进程 实际用户的进程数超过了限制 2.进程终止 2.1 进程退出场景 代码运行完毕,结果正确...如,子进程运行完成,结果对还是不对,或者是否正常退出 进程通过进程等待的方式,回收子进程资源,获取子进程退出信息 3.2 进程等待的方法 3.2.1 wait方法 #include0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...手册 第2节,其它函数man手册第3节 这些函数之间的关系如下图所示 下图exec函数族 一个完整的例子: 4.3 简易shell 我们可以综合前面的知识,做一个简易的shell 考虑下面这个与shell

    15310

    python—subprocess、gl

    默认为False,Linux下,shell=False时, Popen调用os.execvp()执行args指定的程序;shell=True时,如果args是字符串,Popen直接调用系统的Shell...=False, startupinfo=None, creationflags=0) Popen对象创建,主程序不会自动等待子进程完成。...ttl=56 time=7.29 ms 64 bytes from 14.215.177.38 (14.215.177.38): icmp_seq=3 ttl=56 time=8.05 ms 说明: 进程开启子进程之后并没有等待...: child.poll()       # 检查子进程状态 child.kill()       # 终止子进程 child.send_signal()     # 向子进程发送信号 child.terminate...()       # 终止子进程 child.pid               #存储子进程的PID 2.子进程的文本流控制 子进程的标准输入、标准输出和标准错误如下属性分别表示: child.stdin

    1.5K20

    《Linux操作系统编程》 第六章 Linux中的进程监控: fork函数的使用,以及父子进程间的关系,掌握exec系列函数

    1) 创建进程 ▪ Linux中创建进程的方式: - shell中执行命令或可执行文件 - 代码中(已经存在的进程中)调用函数创建子进程 (2) 创建子进程-fork函数 ▪ 函数原型:pid_t...) ▪ 进程继续执行fork函数调用之后的代码,子进程也从fork函数调用之后的代码开始执行 ▪ 为了提高效率,fork,子进程并不立即复制进程数据段、堆和栈,采用了写时复制机制(Copy-On-Write...(5) 孤儿进程 如果进程进程终止之前终止,则子进程进程将变为init进程,保证每个进程都有进程,由init进程调用wait函数进行善后 6.6 Linux中进程的监控 (1) 进程进程状态...键. kill -1 PID 先挂起该进程, 终止子进程, 完成善后工作, 再终止进程. kill -9 PID 立即强行终止进程, 不作任何善后工作....习题 Linux中创建进程主要有哪几种方式? 答:(1)shell中执行命令或可执行文件。(2)代码中(已经存在的进程中)调用函数创建子进程

    17610

    python进程回顾

    阻塞等待子进程 pro.join() 一直等待 死等 pro.join(2) 阻塞等待子进程2秒 如果子进程没有终止那主进程就直接往下执行 终止子进程 pro.terminate() # 终止子进程...向操作系统发出一个终止子进程的信号,存在一定的延时,不要立即判断子进程的状态 判断子进程状态 pro.is_alive() # 判断子进程是否存活 print(pro.is_alive...("获取子进程的PID =%s name=%s" % (pro.pid, pro.name)) # 判断子进程是否存活 print(pro.is_alive()) # 终止子进程...向操作系统发出一个 终止子进程的信号 存在一定延时 不要立即区判断子进程的状态 # pro.terminate() # pro.join() print(pro.is_alive...进程和子进程的虚拟的地址是一样的,真正运行的时候地址就不是我们看到的id了。

    60620

    【Linux】开始掌握进程控制吧!

    表示最近一个进程的退出码),一般0表示正常运行,非零表示有问题。 进程关心子进程的信息,想要知道子进程是否正常运行。...,并且会存在一段时间的窗口期,此时子进程处于僵尸进程: 在这个进程等待的过程中,进程一直等待子进程的退出,处于阻塞等待状态。...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...当然,如果使用位运算就有点那啥了,我们可以使用宏: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。(查看进程的退出码) 对于第三个参数,就可以让进程等待的刚才中区做其他事情。

    10110

    C语言Linux系统编程-等待终止的子进程(僵死进程

    1.等待终止的子进程(僵死进程): 如果一个子进程进程之前结束,内核会把子进程设置为一个特殊的状态,处于这种状态的进程称为僵死进程进程获取了子进程的信息,子进程才会消失。...pid_t wait(int *status); 进程调用这个方法会被阻塞住,如果子进程终止的时候,此方法会调用并且返回终止子进程的pid #include #include 0){ pid=getpid(); ppid=getppid(); printf("我是进程...ppid=%d \n",pid,ppid); }else if(ret==-1){ perror("fork"); } } 输出: 我是进程...,pid=22315 , ppid=12479 ,我新建的子进程pid=22316 我是子进程,pid=22316 , ppid=22315 我的子进程,pid=22316,终止了 2.如果进程进程之前终止

    3.5K20

    Python多进程及多线程基础

    ,或等待多少秒 terminate():不管任务是否完成,立即终止子进程。...()) 输出: 子进程名字 Process-1 子进程PID:3708 子进程进程ppid: 4256 主进程pid:4256 子进程名字 Process-2 子进程PID:8460 子进程进程...ppid: 4256 主进程pid:4256 子进程名字 Process-3 子进程PID:4468 子进程进程ppid: 4256 主进程pid:4256 Python中如何使用多线程 python...join([time]): 等待至线程中止,直至启动的线程终止之前一直挂起;除非给出了timeout(秒),否则会一直阻塞。 isAlive(): 返回线程是否活动的。...正在运行指线程启动、结束前,不包括启动前和终止的线程。 threading.activeCount(): 返回当前活跃的线程数,1个主线程+n个子线程。

    80010

    【Linux】Linux进程控制——进程创建、进程终止进程等待详解

    进程创建 fork函数初识 Linux中fork函数时非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程进程。...#include pid_t fork(void); 返回值:自进程中返回0,进程返回子进程id,出错返回-1 进程调用fork,当控制转移到内核中的fork代码,内核做: 分配新的内存块和内核数据结构给子进程...⭐进程等待 进程等待的必要性 Linux进程提到过,子进程退出,进程如果不管不顾,不读取子进程的退出信息,就可能造成“僵尸进程”的问题,进而造成内存泄漏。...如,子进程运行完成,结果对还是不对, 或者是否正常退出。 进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。

    11610

    进程控制

    进程创建 fork函数初识 linux中fork函数是非常重要的函数,它从已存在进程中创建一个新进程。新进程为子进程,而原进程进程。...; //参数:status 定义了进程终止状态,进程通过wait来获取该值 说明:虽然status是int,但是仅有低8位可以被进程所用。...如果子进程运行完成,结果对还是不对,或者是否正常退出。 进程通过进程等待的方式,回收子进程资源,获取子进程退出信息。...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...进程程序替换 替换原理 用fork创建子进程执行的是和进程相同的程序(但有可能执行不同的代码分支),子进程往往要调用一种exec函数以执行另一个程序。

    72620

    Python多任务-进程

    if __name__ == '__main__': print('进程pid: %d' % os.getpid()) # os.getpid获取当前进程进程号 p = Process...Process创建的实例对象的常用方法: start():启动子进程实例(创建子进程) is_alive():判断进程进程是否还在活着 join([timeout]):是否等待子进程执行结束,或等待多少秒...terminate():不管任务是否完成,立即终止子进程 Process创建的实例对象的常用属性: name:当前进程的别名,默认为Process-N,N为从1开始递增的整数 pid:当前进程的pid...我们以Queue为例,进程中创建两个子进程,一个往Queue里写数据,一个从Queue里读数据: from multiprocessing import Process, Queue import...() pr.join() # pr进程里是死循环,无法等待其结束,只能强行终止: print('') print('所有数据都写入并且读完') """ 输入如下: Put

    32420

    Linux进程控制

    进程控制 fork函数 进程终止 退出码 常见的退出方式 进程等待 什么是进程等待,为什么要进程等待 阻塞与非阻塞 进程替换 替换原理 替换函数 执行系统命令 执行自己写的程序 模拟实现简易的shell...一共有32个比特位,其中重要的只有16个比特位: 终止信号是一个进程出异常了会受到终止信号,暂时用来判断进程是否正常退出。 退出状态是看结果是否正确。...但是如果让我们自己去求信号和退出码很麻烦,所以Linux提供了一些操作的宏,重点说两个: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...阻塞与非阻塞 阻塞 进程一直等子进程结束回收资源。 非阻塞 进程一段时间过来看一下子进程是否结束,如果没结束可以做其他事情,这个叫轮询方式。...那么刚才我们的shell不能cd …是因为他只能让当前工作目录发生变化,因为shell是通过创建子进程去执行命令,我们让目录进行变化的时候是让子进程去帮助执行,也就是说改变的其实是子进程的目录,和进程没有任何关系

    2.9K00

    UNPv1第五章:TCP客户服务器程序实例

    fork返回客户/服务器的状态. 注意,此时listen和connfd这两个描述符都在进程和子进程共享 ?...在下一步是由进程关闭已连接套接字,由子进程关闭监听套接字 父子进程关闭相应套接字后客户/服务器的状态 ?...-1表示等待第一个结束的子进程,options附加选项,常用的是WNOHANG,告知内核没有以终止子进程时不要阻塞 函数wait和waitpid均返回两个值: 函数的返回值是终止子进程进程ID号...,子进程终止状态(一个整数)则是通过指针statloc返回的。...wait和waitpid的区别: wait 等待第一个结束的子进程,如果没有结束的子进程,wait将阻塞。waitpid 通过参数设置,可以没有子进程结束时waitpid不阻塞。

    46440

    【Linux】进程控制

    因为if里面即子进程里面用exit退出了,所以后面的都是进程的。 下面做出修改: 运行结果: 修改的代码先让进程休眠十秒。...子进程运行五秒后退出,此时由于进程还在休眠无法回收,所以子进程就变成Z状态,再过五秒,子进程就被进程回收了。...Pid>0.等待其进程ID与pid相等的子进程。 status: WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。...WIFEXITED(status): 若为正常终止子进程返回的状态,则为真。(查看进程是否是正常退出) WEXITSTATUS(status): 若WIFEXITED非零,提取子进程退出码。...因为WNOHANG只会查看一次子进程是否结束,使用循环结构就可以到最后判断子进程是什么情况了。即非阻塞等待的时候+循环=非阻塞轮询。 非阻塞等待时,进程可以每次查看子进程的间隙做其他事情。

    11010

    Linux内核编程--进程控制,线程控制,锁机制

    进程调用wait/waitpid后会被挂起,直到子进程终止运行并将退出状态返回给进程进程也可以通过wait/waitpid来检验子进程是否已经运行结束。...waitpid与wait的区别: 1.wait返回任一终止子进程的状态,waitpid可以指定一个特定的进程进行等待。...3.终止进程--exit #include void exit(int status) --status: 进程退出码,主要返回给进程 无返回 4.进程中启动另一个进程并退出...*cmdstring) system调用fork产生子进程, 由子进程来执行shell脚本cmdstring, 此命令执行完返回到原调用的进程。...否则,返回错误编号 该函数主要用来清理线程终止残留的资源占用。 被分离的线程,其终止时,线程的存储资源会被立即收回。

    1.2K20
    领券