通过清理杀死子进程
Kill child process with cleanup
本文关键字:子进程 更新时间:2023-10-16
有没有办法杀死我的应用程序的子进程并执行它的清理(调用解构函数和 atexit 函数),类似于exit(exit_code)
,但在另一个进程上?
如果你在Windows上,你可能通过CreateProcess启动你的子进程,它的最后一个参数是一个PROCESS_INFORMATION。
MSDN 上的 CreateProcess
MSDN 上的进程信息
选项 1:
此进程信息包含在 hProcess 成员中启动的进程的句柄。
可以存储此句柄并使用它来终止子进程。
插入您可能想发送WM_CLOSE和/或WM_QUIT?要"干净"地结束该过程:
这是一篇关于如何执行知识库文章 KB 如何干净地杀死 win32 进程
**末端插入件**
选项 2:
以下是有关如何正确终止进程树的讨论: 在窗口上终止进程树
没有简单的Win32 API可以解决这种事情。操作系统并不关心程序的源代码是用什么语言编写的,编译的程序在它看来只是一系列CPU指令加上数据。
最干净的方法是在进程之间建立某种通信通道(例如通过共享内存)并简单地请求进程终止。
您可以通过启动子进程作为调试进程,然后使用调试 API 更改子进程的行为来实现相同的目的,但这太侵入性,并且不是很容易实现。
相关文章:
- 终止 QProcess 不会终止子进程
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 子进程更新共享 mmap 内存,但父进程没有更改
- 使用 waitpid 时等待子进程终止
- 使用重定向标准处理子进程中的 kbhit
- 由 JOB 中的进程启动的子进程是否可以将 JOB 属性设置为脱离作业?
- 是否可以将子进程的 stdout 重定向到父进程中的另一个文件?
- kill() 总是返回 0(成功),即使在子进程已经结束之后?
- 父进程和子进程之间的 POSIX 信号量
- 检测到由于操作系统内存不足而导致子进程终止
- 使用system()创建独立的子进程
- 从stdin读取时子进程挂起(fork/dup2竞争条件)
- 在 Bash 脚本中处理来自子进程的信号
- Qt C++ - 如何成功将数据传递给子进程?
- C++ 窗口本地系统模拟在子进程中失败
- 将类型化数组写入子进程 stdin 无法正常工作
- 将 nodejs 脚本作为子进程执行(而不是从其他脚本执行)
- 使用信号检测子进程何时终止的最佳方法是什么?
- 等待等待失效的子进程
- 如何在Windows上通过QProcess启动提升的子进程?