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

通过子进程关闭PC后会发生什么?

通过子进程关闭PC后,会发生以下情况:

  1. 子进程的关闭:子进程会被操作系统正常关闭,释放占用的系统资源,并将其从进程列表中移除。
  2. 父进程的继续运行:父进程不会受到子进程关闭的影响,它会继续在操作系统中运行。
  3. 系统资源的释放:子进程关闭后,它所占用的系统资源,如内存、文件句柄等会被操作系统回收和释放,以供其他进程使用。
  4. 进程间通信的中断:如果子进程与其他进程之间存在进程间通信(如管道、共享内存等),子进程关闭后,这些通信机制会被中断,其他进程将无法再与子进程进行通信。
  5. 未保存数据的丢失:如果子进程在关闭前有未保存的数据,这些数据可能会丢失,因为子进程关闭时,操作系统不会自动保存未保存的数据。

需要注意的是,关闭PC是一个比较极端的操作,一般情况下,我们会通过操作系统提供的正常关机方式来关闭计算机,以确保所有进程都能够正常退出并保存数据。

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

相关·内容

调试器之工作原理

软件断点 当cpu执行了特定调试指令后会发出一个中断,而软件断点要做的就是在对应的pc位置“插入”断点指令,说是插入,实际上是修改原指令,触发中断后再写回。...以x86的INT3指令为例,在一个位置设置断点后会保存该位置的原指令,之后在该位置写入INT3,当执行到这条指令的时候发生软中断,内核向进程发送SIGTRAP信号,之后这个信号转发给父进程,此时再用保存的指令替换之前写入的...硬件断点 某些cpu包含调试用的寄存器,通过设置对应的值来控制对应产生中断的pc位置以及一些其他信息。...ptrace(PTRACE_TRACEME)来设定自身是被trace的对象,接着通过execl来执行对应的命令行程序,此时执行的程序作为调试器的进程。...而调试器进程本身则是通过wait去等待进程停下来,等wait返回后就可以查看进程的信息或者对子进程进行操作。

68810

基于qemu和unicorn的Fuzz技术分析

child_pid) {       // 进程会进入这,关闭通信管道描述符,然后从 afl_forkserver 返回继续往下执行被测试程序       afl_fork_child = 1;       ...接收到数据后,fork server 会 fork 出新进程,此时进程关闭所有与 afl-fuzz 通信的文件描述符并从 afl_forkserver 返回继续往下执行被测试程序。...而父进程则把刚刚 fork出的测试进程的 pid 通过管道发送给 afl-fuzz。 之后 fork server 进程进入 afl_wait_tsl ,不断循环处理进程翻译基本块的请求。...afl_fork_child) return;   t.pc      = pc;   t.cs_base = cb;   t.flags   = flags;   // 通过管道发送信息给 父进程 (...首先函数里面是死循环,只有当 read 失败了才会退出循环,read 又是阻塞的,所以只有 fd 管道的另一端关闭了才会 read 失败退出函数,所以当进程执行结束或者由于进程超时被 afl-fuzz

86120
  • Linux 多进程编程详解

    运行(Running):进程正在执行。 阻塞(Blocked):进程正在等待某些事件(如I/O操作)发生。 终止(Terminated):进程已完成执行或被终止。...如果进程在运行过程中需要等待某些事件(如I/O操作),则会进入阻塞状态。当等待的事件发生时,进程重新进入就绪状态,等待调度运行。当进程完成任务或被终止时,进入终止状态。...进程状态:表示进程当前的状态(创建、就绪、运行、阻塞、终止)。 程序计数器(PC):保存进程下一条将要执行的指令地址。 寄存器:保存进程的上下文信息。 内存管理信息:包括进程的地址空间、页表等信息。...父进程进程分别打印各自的PID和相关信息,并通过waitpid()等待进程结束。 2.2 进程的终止 进程在完成任务后会终止,终止进程可以通过exit()系统调用实现。...<< std::endl; return 1; } else if (pid == 0) { // 进程 close(fd[0]); // 关闭读端

    17210

    ASUS ROG Armory Crate Lite Service v4.2.8 中的权限提升分析 (CVE-2021-40981)

    登录后,Armory Crate 服务,想象中称为 Armory Crate Lite Service,创建了一系列进程,其中我们找到ArmouryCrate.Service.exe了进程ArmouryCrate.UserSessionHelper.exe...记住这一点,以后会派上用场的。...我们去打猎 现在我们对我们的目标是什么有了一个模糊的概念,让我们继续分析我们将用来搜索漏洞的方法: 隔离所有导致CreateFile通过进程监视器并导致“NO SUCH FILE”或“PATH NOT...为此,请返回菜单栏并单击Options -> Enable Boot Logging,将其余部分保留为默认值,关闭进程监视器并重新启动设备。...根本原因分析 现在让我们简要地看看是什么导致了有问题的漏洞。从前面的截图之一中显示的调用堆栈可以看出,调用发生在函数LoadLibraryExW的偏移处,在进程加载的 DLL 内。

    3.3K90

    C# 多线程学习系列一

    ,会造成PC停止工作.如果此时重启,更shit的是,所有的应用程序都会停止,且丢失数据. (2)、Windows进程 i、什么是Windows进程,以及它解决的问题 MS为了解决单个"工作线程"的问题,...一个Chrome浏览器进程包含了很多子进程(进程可以共享父进程的资源),后面包含了正在使用的资源集合,包括CPU、内存等.每个进程都有一个虚拟空间地址(PID)....当一个应用程序应为代码故障发生卡死等问题,并不会影响其他的应用程序的运行,只需要打开任务管理器,将该进程关闭即可.其他应用程序的数据也不会丢失,因为它们是彼此独立的进程. ii、Window进程的安全性...在Windows中,进程之间不能相互访问(不包括父子进程),单个进程也无法访问Windows内核. iii、关于CPU的问题 虽然Windows进程很好的解决了单个"工作线程"的问题,Windows不会发生一个应用程序崩溃...但是如果PC只有一个CPU,当CPU本身发生死循环等问题,还是会导致PC停止工作. iv、什么是Windows线程,以及Windows线程解决的问题 MS为了解决单个进程执行异常,导致CPU停止工作的问题

    63650

    字节二面:Redis 的大 Key 对持久化有什么影响?

    AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过 fork() 函数创建一个进程来处理任务。...在通过 fork() 函数创建进程的时候,虽然不会复制父进程的物理内存,但是内核会把父进程的页表复制一份给进程,如果页表很大,那么这个复制过程是会很耗时的,那么在执行 fork 函数的时候就会发生阻塞现象...那什么时候会发生物理内存的复制呢?...所以,有两个阶段会导致阻塞父进程: 创建进程的途中,由于要复制父进程的页表等数据结构,阻塞的时间跟页表的大小有关,页表越大,阻塞的时间也越长; 创建完进程后,如果子进程或者父进程修改了共享数据,就会发生写时复制...AOF 重写机制和 RDB 快照(bgsave 命令)的过程,都会分别通过 fork() 函数创建一个进程来处理任务。

    33020

    do_fork 的实现

    上面讲述了如何通过 fork, vfork, pthread_create 去创建一个进程,或者一个线程。...通过分析最终 fork, vfork, pthread_create 最终都会通过系统调用 do_fork 去创建进程。...task_struct 结构 为进程分配内核栈 将父进程 task_struct 的内容复制给进程的 task_struct 设置进程的内核栈 建立 thread_info 和内核栈的关系 清空子进程需要调度的标志位...thread_struct:在内核态两个进程发生切换时,用来保存上一个进程的相关寄存器 pt_regs:当用户态的进程发生异常(系统调用,中断等)进入内核态时,用来保存用户态进程的寄存器状态 int...pt_regs 结构 将新创建进程的 thread_struct 结构清空 用户进程的情况 获取当前进程的 pt_regs 一般用户态通过系统调度陷入到内核态后处理完毕后会通过 x0 寄存器设置返回值的

    72521

    美团一面:为什么线程崩溃崩溃不会导致 JVM 崩溃

    当然了发 kill 信号必须具有一定的权限,否则任意进程都可以通过发信号来终止其他进程,那显然是不合理的,实际上 kill 执行的是系统调用,将控制权转移给了内核(操作系统),由内核来给指定的进程发送信号...(假设为 11,即 SIGSEGV,一般非法访问内存报的都是这个错误) 操作系统根据情况执行相应的信号处理程序(函数),一般执行完信号处理程序逻辑后会进程退出 注意上面的第五步,如果进程没有注册自己的信号处理函数...,那么操作系统会执行默认的信号处理程序(一般最后会进程退出),但如果注册了,则会执行自己的信号处理函数,这样的话就给了进程一个垂死挣扎的机会,它收到 kill 信号后,可以调用 exit() 来退出,...,每个进程的虚拟空间都是一样的,而线程会共用进程的地址空间,以 32 位虚拟空间,进程的虚拟空间分布如下 那么 stackoverflow 是怎么发生的呢,进程每调用一个函数,都会分配一个栈桢,然后在栈桢里会分配函数里定义的各种局部变量...那么最终会走到 report_and_die 这个方法,这个方法主要做的事情是生成 hs_err_pid_xxx.log crash 文件(记录了一些堆栈信息或错误),然后退出 至此我相信大家明白了为什么发生

    2.1K20

    Linux进程通信——管道

    这个过程其实就相当于父进程通过操作系统写给管道,也就是相当于写给操作系统,然后进程通过操作系统从管道当中读取内容。...3.如果写端关闭,读端会发生什么呢?...4.读关闭发生什么呢? 操作系统当然会自己判断,如果都不读了,就没必要去写了,会发送给进程一个信号,终止写端。 这里操作系统会发送13信号。...本来应该打印在左侧的通过管道文件传到了右边。此时这里就完成了命令行式的打印。 但是这里还是大小不变。这是为什么呢?...第二个 我们读端输出并没有换行,为什么自己换行了呢?因为我们平时输入之后会按回车,其实就等于\n 了,打印的时候也算上了\n,所以打印出来的结果就是带换行的。 这里也可以这么写:

    4K70

    惊群问题 | 复现 | 解决

    什么是惊群问题 惊群问题又称惊群效应,当多个进程等待同一个事件,事件发生后内核会唤醒所有等待中的进程,但是只有一个进程能够获得 CPU 执行权对事件进行处理,其他的进程都是被无效唤醒的,随后会再次陷入阻塞状态...发生惊群问题的时机 通过上面的介绍可以知道,惊群问题主要发生在 socketaccept 和 socketselect 两个函数的调用上。 下面我们通过两个例子复现这两个系统调用的惊群。...在调用完 pcntl_fork 函数后,如果派生子进程成功,那么该函数会有两个返回值,在父进程中返回进程进程 ID,在进程中返回 0;派生失败则返回 -1。...用户程序:加锁 通过上面我们可以知道,惊群问题发生的前提是多个进程监听同一个套接字上的事件,所以我们只让一个进程去处理监听套接字就可以了。...if (ngx_add_event(rev, NGX_READ_EVENT, 0) == NGX_ERROR) { return NGX_ERROR; } 总结 通过本文我们了解到什么是惊群问题

    2K40

    通过fork来剖析Linux内核的内存管理和进程管理(下)

    本文讲解fork的时候进程管理相关的内容,主要讲解fork的时候进程如何组装调用相关的基础设施组件,以及如何加入运行队列的,调度执行的时候究竟会发生什么。...,异常的现场(通用寄存器的内容,如发生异常时的x0-x30,sp, pc, pstate)会被压到内核栈,通过pt_regs结构来描述,而当异常处理结束的时候,会需要恢复现场,将这些保存的值恢复到通用寄存器中...最后两句,来设置的是进程切换时,进程pc和sp,当进程第一次被调度的时候,从ret_from_fork开始执行指令,栈指针指向childregs,即为设置后pt_regs。...好像什么都没发生一起,但是他却孕育了新的进程在当前cpu或者其他cpu上活跃着。...copy_thread来设置异常返回的上下文和调度上下文这是为调度进程后处理器状态做准备,最后通过wake_up_new_task来唤醒进程将它放置到合适cpu的运行队列,来等待合适的调度时机参与进程调度

    1.6K32

    GPDB中Latch等待与唤醒实现机制

    通过is_set来实现等待。 epoll_ret_event[]数组:epoll_wait将发生的事件集合从内核复制到该数组中。...4、WaitEventSetWait 等待注册的事件发生。调用epoll_wait函数来监听epoll上注册的事件。如果没有任何IO事件,则一直被阻塞,直到有IO事件发生。...5、FreeWaitEventSet 关闭epoll文件描述符,释放WaitEventSet。...1)fork出一个进程时,进程会将父进程继承的管道关闭掉。然后自己重新创建一个管道。得到2个fd。pipefd[0]用于读取写入管道的内容,pipefd[1]用于向管道写入。...通过全局变量selfpipe_readfd和selfpipe_writefd分别表示读和写fd。当然,这是用于同一个进程不同线程之间进行管道通信。

    20030

    redis入门(二)

    bgsave命令:redis进程会执行fork操作创建进程执行保存RDB快照。只有在fork进程才会短时间阻塞。建议大家都是用bgsave命令保存RDB快照。...原理 [20191030161328.png] 执行bgsave命令,Redis父进程判断当前是否存在正在执行的进程,如RDB/AOF进程,如果存在bgsave命令直接返回。...父进程执行fork操作创建进程,fork操作过程中父进程会阻塞,通过info stats命令查看latest_fork_usec选项,可以获取最近一个fork操作的耗时,单位为微秒。...进程创建RDB文件,根据父进程内存生成临时快照文件,完成后对原有文件进行原子替换。...由于fork操作运用写时复制技术,进程只能共享fork操作时的内存数据。 进程根据内存快照,按照命令合并规则写入到新的AOF文件。

    68700

    软件测试|connection-reset-by-peer问题定位

    accept发生错误最常见就是句柄被打满了,查看进程监听端口链接情况和进程句柄使用情况。...- - - - - - 5.通过netstat or ss查看监听端口的链接情况,通过lsof查看进程句柄占用情况,通过ulimit查看系统限制。发现果然进程句柄被打满了,超过了10240的限制。...至此,虽然明确了客户端请求会响应connection reset by peer是由于服务进程句柄被打满导致的,但是依然不知道什么原因导致了服务进程句柄被打满。...那么接下来定位的重点就是为什么服务端会突然出现阻塞?由于不稳定复现,是什么触发了阻塞?...,等待所有分组死掉·CLOSING: 双方同时尝试关闭,等待对方确认三次握手图片四次挥手图片7.到了应用程序层面,要分析进程过去发生什么,只能从应用日志和服务监控入手了,从历史监控曲线(内存、句柄、流量

    97610

    探究 Nginx 中 reload 流程的真相

    那么下面我们通过分析 nginx 的 reload 流程,来探究下 nginx 到底做了些什么?所谓优雅的退出和立即退出有什么区别?...我们会在第五步在启动新的 worker 进程以后,由 master 进程再向老 worker 进程发送 QUIT 信号,QUIT 信号和 TERM,INT 信号是不一样的,QUIT 信号是请优雅地关闭进程...那么老的 master 进程收到 QUIT 信号后,首先关闭监听句柄,也就是说这个时候新的连接只会到新的 worker 进程,所以虽然他们之间有时间差,但是时间是非常快速的,那么关闭监听句柄后,处理完当前连接后就结束进程...那么老的 worker 进程在正常的情况下会在处理已经建立好的连接上的请求之后关闭这个连接,哪怕这个连接是 keeplive 请求也会正常关闭。...,时间到了之后会强制把老的 worker 进程退出掉。

    2K10

    探究 Nginx 中 reload 流程的真相

    那么下面我们通过分析 nginx 的 reload 流程,来探究下 nginx 到底做了些什么?所谓优雅的退出和立即退出有什么区别? reload 流程 ?...我们会在第五步在启动新的 worker 进程以后,由 master 进程再向老 worker 进程发送 QUIT 信号,QUIT 信号和 TERM,INT 信号是不一样的,QUIT 信号是请优雅地关闭进程...那么老的 master 进程收到 QUIT 信号后,首先关闭监听句柄,也就是说这个时候新的连接只会到新的 worker 进程,所以虽然他们之间有时间差,但是时间是非常快速的,那么关闭监听句柄后,处理完当前连接后就结束进程...那么老的 worker 进程在正常的情况下会在处理已经建立好的连接上的请求之后关闭这个连接,哪怕这个连接是 keeplive 请求也会正常关闭。...,时间到了之后会强制把老的 worker 进程退出掉。

    3K20

    自带的 print 函数居然会报错?

    根据官方文档的解释,该函数会执行 fork 一个进程执行 command 这个命令,同时将进程的标准输出通过管道连接到父进程; 也就该方法返回的文件描述符。...这里画个图能更好地理解其中的原理: 在这里的使用场景中并没有获取 popen() 的返回值,所以 command 的执行本质上是异步的; 也就是说当 task.py 执行完毕后会自动关闭读取端的管道。...如图所示,关闭之后进程会向 pipe 中输出 print '1000'*1024,由于这里输出的内容较多会一下填满管道的缓冲区; 于是写入端会收到 SIGPIPE 信号,从而导致 Broken pipe...很容易想到,父子进程之间可以通过上文提到的管道(匿名管道)来进行通信。...父子进程通过匿名管道进行通信的,当读取端关闭时,写入端输出到达管道最大缓存时会收到 SIGPIPE 信号,从而抛出 Broken pipe 异常。 进程会继承父进程的文件描述符。

    69210
    领券