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

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

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

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

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

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

相关·内容

调试器之工作原理

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

75310

【Linux】:进程间关系 与 守护进程

会话 4.1 什么是会话 刚刚我们谈到了进程组的概念, 那么会话又是什么呢? 会话其实和进程组息息相关,会话可以看成是一个或多个进程组的集合, 一个会话可以包含多个进程组。...#include /* *功能:创建会话 *返回值:创建成功返回 SID, 失败返回-1 */ pid_t setsid(void); 该接口调用之后会发生: 调用进程会变成新会话的会话首进程...创建子进程, 父进程终止, 子进程继续执行, 因为子进程会继承父进程的进程组 ID, 而进程 ID 则是新分配的, 就不会出现错误的情况 5....控制终端 先说下什么是控制终端? 在 UNIX 系统中,用户通过终端登录系统后得到一个 Shell 进程,这个终端成为 Shell 进程的控制终端。...如果终端关闭,这些进程可能会被终止或无法正常运行。

5510
  • 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]); // 关闭读端

    24910

    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.5K90

    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停止工作的问题

    63850

    Linux系统编程:进程控制(创建,终止,等待)

    4.全局变量errno error用于储存最后一次的错误码; 发生错误一次进程不就结束了吗,为什么会说是"最后一次"?...,最后会转化为硬件信号给操作系统; 三,进程等待 3.1什么是进程等待 等待其实就是阻塞,让一个进程处于阻塞状态; 3.2为什么要进程等待 1.我们创建子进程是让子进程帮我们执行其他的任务,有的时候我们需要知道子进程的结果...,这样就不会出现僵尸状态了; 3.3怎么做进程等待 这里是通过两个系统调用来实现的:wait/waitpid接口; 3.4wait接口 pid_t wait(int *status);等待任意一个子进程结束...调用函数,自己帮我们填充这个变量的; wait函数等待成功后,status就会获得该子进程的退出码; 为什么不使用全局变量来获取子进程的退出状态呢?...因为父子进程一旦一方修改资源就会发生写时拷贝,进程具有独立性,双方看不到同一个status; 3.5waitpid接口 pid_t waitpid(指定子进程pid,子进程退出状态,选项); 等待成功就会返回子进程的

    11310

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

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

    35020

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

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

    2.2K20

    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 寄存器设置返回值的

    75021

    惊群问题 | 复现 | 解决

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

    2K40

    Linux进程通信——管道

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

    4K70

    通过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.7K32

    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。当然,这是用于同一个进程不同线程之间进行管道通信。

    22630

    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文件。

    70200

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

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

    1K10

    【Linux】进程信号

    进程信号 什么是进程信号? 进程信号(Signal) 是一种异步的进程间通信机制,用于通知进程发生了某种事件。 异步事件:不会阻塞当前进程,而是在某个条件满足后触发,并由系统或者回调函数处理的事件。...假定我们将所有信号捕捉了之后会怎么样呢? 可以看见,无论如何都杀不死进程,那这样这个进程是不是就无法无天了?...指令产生信号 没错,kill既是指令也是系统调用,kill也可以产生信号 软件条件产生信号 我们将一个例子,我们之前学的管道,当读端关闭之后,写端继续往管道中写入是非法的,所以系统就会给进进程发送信号将写端关闭...总结 进程信号(Signal)是 Linux 中一种重要的 进程间通信 和 异常处理 机制,能够异步通知进程发生特定事件。...例如,使用 SIGCHLD 管理子进程,或使用 SIGUSR1 进行进程间通信。 然而,信号的 异步性 可能导致竞态条件,尤其是在信号处理函数中执行非异步安全操作时。

    10510

    从零开始:实现进程间管道通信的实例

    单向通信:匿名管道是单向的,即数据只能从一个进程流向另一个进程。如果需要双向通信,则需要创建两个管道。 3.3 应用场景 匿名管道常用于父进程创建子进程,并通过管道向子进程传递数据的场景。...pipe ,对于读端来说,读端就会把管道里的数据先读完,最后会读到返回值为0 读端本身不会因为写端的关闭而被OS直接关闭,它仍需要由读进程显示地关闭或随着读进程的结束而关闭。...pipe ,对于读端来说,读端就会把管道里的数据先读完,最后会读到返回值为0 // 关于write函数的写入,在写入字符串的时候,第三个参数的字节数大于要写入的字符串,是就写入字符串就停止了,小于是发生截断...,OS会将写入的进程关闭(子进程),(通过信号 -13 SIGPIPE) #include #include #include #include...,OS会将写入的进程关闭(子进程),(通过信号 -13 SIGPIPE) // 关于write函数的写入,在写入字符串的时候,第三个参数的字节数大于要写入的字符串,是就写入字符串就停止了,小于是发生截断

    14110
    领券