【问题标题】:how to kill c++ process using c++ and let it do something before hte kill如何使用c++杀死c++进程并让它在杀死之前做一些事情
【发布时间】:2014-12-01 10:07:02
【问题描述】:

我正在尝试控制使用 c++ 编写的进程 带有 Windows C# 用户界面

首先我运行进程

 private void button1_Click(object sender, EventArgs e)
 {

       Process myProcess = new Process();            

       myProcess.StartInfo.FileName = "filepath.exe";
       myProcess.StartInfo.CreateNoWindow = true;
       myProcess.Start();

}

这将运行进程

现在运行一段时间后,我想终止它 使用:

process.Kill();

但是,就像Ping 命令一样,我希望它生成 一些结果,将它们写入文件然后杀死

那么有没有办法找出另一个进程是否试图杀死 这个过程所以我把它引到写文件函数

【问题讨论】:

  • 设置信号处理程序。
  • Process.Kill 不给进程做任何事情的机会。使用某种进程间通信(最简单的一种是使用名称事件)并在双方都实现这一点。

标签: c# c++ process kill


【解决方案1】:

每当您杀死一个进程时,您实际上是在向它发送一个信号(很可能是 SIGKILL),因此您需要做的就是为该特定信号分配一个信号处理程序,或者您可以为多个信号分配一个信号处理程序:

signal(SIGTERM, &terminateSigHandler);
signal(SIGKILL, &terminateSigHandler);

etc..

【讨论】:

  • 您可能不知道,但这是否也适用于其他语言(即 C++)?
  • @cybermonkey 我一直使用它来优雅地关闭各种情况下的进程。
【解决方案2】:

正如@Alex Farber 在他的评论中提到的,Process.Kill 在杀死程序之前无法执行任何操作。

在这种情况下,我会亲自编写一个执行任何操作的函数,然后杀死进程。

例子:

private void killProcess()
{
    [execute code here prior to killing the process] 

    process.Kill();
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-13
    • 1970-01-01
    • 1970-01-01
    • 2021-05-18
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    相关资源
    最近更新 更多