System.Diaganostics.Process.Id 与任务管理器中显示的进程 ID 不同。为什么?

2023-11-23

我正在使用 C#System.Diagnostic.Process object.
它的属性之一是Id.
The Id这产生的与PID,如图所示Windows Task Manager.
为什么是这样?

你看,一旦这个过程开始。
它启动了另外两个非托管进程,我无法通过对象属性引用显式获取它们的 ID。
我必须搜索所有进程才能通过进程名称找到它们System.Diagnostics.Process.GetProcesses().

我正在尝试找到一种可靠的方法来终止此进程以及所有关联的进程PID,显示在Task Manager.
有没有更好的办法?

我不能直接杀死具有关联进程名称的所有进程,因为这可能会杀死与我的程序无关的进程的其他实例。


关键是你不想通过 Id 杀死你的进程。事实上,这是一个竞争条件:您生成的进程可能会终止,并且可能会使用相同的 ID 创建另一个进程。然后,当你去杀死它时,你最终会杀死新进程,而不是已经死掉的旧进程。

终止生成的进程的最可靠方法是将它们放入 Job 对象中,并在任务完成后终止 Job。

下面是一些实现 Job 类的简单代码:

class Job
{
    [DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
    public static extern IntPtr CreateJobObject(IntPtr lpJobAttributes, string lpName);

    [DllImport("kernel32.dll")]
    public static extern bool AssignProcessToJobObject(IntPtr hJob, IntPtr hProcess);

    [DllImport("kernel32.dll")]
    public static extern bool TerminateJobObject(IntPtr hJob, uint uExitCode);

    IntPtr job;

    public Process StartProc(string commandLine)
    {
        if (job == IntPtr.Zero)
            job = CreateJobObject(IntPtr.Zero, null);
        ProcessStartInfo si = new ProcessStartInfo(@"c:\windows\system32\cmd.exe");
        si.Arguments = "/c " + commandLine;
        si.CreateNoWindow = false;
        si.UseShellExecute = false;
        Process proc = Process.Start(si);
        AssignProcessToJobObject(job, proc.Handle);
        return proc;
    }

    public void TerminateProc()
    {
        // terminate the Job object, which kills all processes within it
        if (job != null)
            TerminateJobObject(job, 0);
        job = IntPtr.Zero;
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

System.Diaganostics.Process.Id 与任务管理器中显示的进程 ID 不同。为什么? 的相关文章

  • 将字符串作为 PChar 从 CSharp 传递到 Delphi DLL

    我正在尝试将字符串从 C 传递到 Delphi 构建的 DLL Delphi DLL 需要 PChar 这是Delphi导出 procedure DLL Message Location PChar AIntValue integer st
  • 将公历日期转换为儒略日期,然后再转换回来(随着时间)

    我正在编写一个程序 必须将当前的公历日期和时间转换为儒略日期 然后再转换回公历门 最终我需要添加能够添加年 月 日 小时 分钟和秒的功能 但我需要先解决这部分问题 现在我已经从公历日期转换为儒略日期 所以从逻辑上讲 我觉得我应该能够以某种方
  • 在没有 epsilon 的情况下可以将浮点数与 0.0 进行比较吗?

    我知道 要比较两个浮点值 需要使用一些 epsilon 精度 因为它们并不精确 但是 我想知道是否存在边缘情况 我不需要那个 epsilon 特别是 我想知道这样做是否总是安全的 double foo double x if x lt 0
  • 如何从 Qt 应用程序通过 ODBC 连接到 MySQL 数据库?

    我有一个新安装的 MySQL 服务器 它监听 localhost 3306 从 Qt 应用程序连接到它的正确方法是什么 原来我需要将MySQL添加到ODBC数据源 我在遵循这个视频教程后做到了这一点 https youtu be K3GZi
  • 嵌入资源文件的路径

    我的资源文件中有一个图标 我想引用它 这是需要图标文件路径的代码 IWshRuntimeLibrary IWshShortcut MyShortcut MyShortcut IWshRuntimeLibrary IWshShortcut W
  • ASP.NET - 在 RenderContent 调用中将事件处理程序添加到 Repeater 内的 LinkBut​​ton

    我有一个加载自定义用户控件的 Sharepoint WebPart 用户控件包含一个 Repeater 而 Repeater 又包含多个 LinkBut ton 在 Web 部件的 RenderContent 调用中 我有一些用于添加事件处
  • 如何在C中同时运行两个子进程?

    所以我开始学习并发编程 但由于某种原因我什至无法掌握基础知识 我有一个名为 fork c 的文件 其中包含一个 main 方法 在此方法中 我将 main 分叉两次 分别进入子进程 1 和 2 在孩子 1 中 我打印了字符 A 50 次 在
  • 将 dataGridView 中选定的行作为对象检索

    我有一堂这样的课 public partial class AdressBokPerson public long Session get set public string F rnamn get set public string Ef
  • 控制台应用程序中使用 Unicode 字符的 _tprintf

    我正在从 Unicode 构建的控制台应用程序 使用 C 和 Visual Studio 2008 执行这个简单的输出 此代码旨在在 Windows 上运行 tprintf L Some sample string n 一切正常 但是如果我
  • C# 枚举到字符串自动转换?

    是否可以让编译器自动将我的 Enum 值转换为字符串 这样我就可以避免每次都显式调用 ToString 方法 这是我想做的一个例子 enum Rank A B C Rank myRank Rank A string myString Ran
  • 在c#中获取没有时间的日期

    我的表上有一列 缺勤日期时间 日期 当我想要获取包含日期的行时 它返回 0 行 这是我的 C 代码 DateTime ClassDate DateTime Parse lblDate Content ToString var Abs dbs
  • 如何将STL容器数据转储到gdb中?

    我无法在 gdb 中转储 STL 无序映射容器值 变量类型是 std unordered map var 我的 gdb 版本 7 7 1 GDB配置 configure host x86 64 linux gnu target x86 64
  • 如何使用默认电子邮件客户端发送电子邮件?

    我想使用系统的默认电子邮件客户端 雷鸟 outlook 等 从 net windows 窗体应用程序发送电子邮件 我想预设主题和正文 我认为有一种方法可以通过向 Windows 资源管理器发送类似的内容来做到这一点 mailto 电子邮件受
  • .NET WebClient:DownloadString 在哪里?

    我可能在这里遗漏了一些东西 但是当我使用 WebClient 并查找 DownloadString 方法 如书籍示例中所示 时 我只看到 DownloadStringAsync 我缺少什么导入 您使用的是 Silverlight 吗 Sil
  • Type.GetInterfaces() 仅适用于声明的接口

    首先 像这样的问题有很多 也许有些OP甚至在问同样的问题 问题是这些问题的答案 无论是否接受 都没有真正回答这个问题 至少我找不到 如何确定类直接声明的接口 而不是由父级或声明的接口继承的接口 e g interface I interfa
  • 连接到没有元数据的网络服务

    我想连接到此网络服务 https training api temando com schema 2009 06 server wsdl https training api temando com schema 2009 06 serve
  • 如何从 Access 数据库中读取“是/否”值作为布尔值?

    帮我找回YES NO来自 MS Access 的布尔格式数据类型 我尝试解析它 但它总是返回 false 更新 实际上不是问题抱歉 它确实接受 YES NO 作为布尔值 OleDbconnection dbConnect new OleDb
  • 卸载程序

    我正在尝试使用此代码卸载程序 但它似乎不起作用 我尝试过其他答案 但似乎也不起作用 有人可以帮助我吗 我正在尝试按给定名称 displayName 卸载该程序 例如 我给出 displayName Appname 那么此代码应该从我的计算机
  • 实体框架代码首次日期字段创建

    我正在使用实体框架代码优先方法来创建我的数据库表 下面的代码 创建一个DATETIME数据库中的列 但我想创建一个DATE柱子 DataType DataType Date DisplayFormatAttribute ApplyForma
  • 如何使用 C# 为 azure devops 变量赋值

    我有 selenium C 测试脚本 可以从浏览器获取令牌 我有两个 azure devops 任务 一个用于执行 selenium 测试 另一个用于执行 API 测试 我想将 selenium 测试获取的令牌传递给 API 测试执行任务

随机推荐

  • 如何在 sails.js 中配置 https

    我正在尝试设置本地 HTTPS 服务器以在 Sails js 中进行测试 我无法找到任何指针如何在 sails js 中执行此操作 对于快递来说 var express require express var https require h
  • 如何在Python中将函数作为函数参数传递

    这是我目前拥有的并且运行良好 def iterate seed num x seed orbit x for i in range num x 2 x 1 x orbit append x return orbit 现在 如果我想将第 5
  • 如何创建一个可以固定行和列滚动的自定义控件?

    我试图弄清楚如何制作一个自定义控件 使用户可以向各个方向滚动 但具有固定的行和列 网格不适合我想要做的事情 因为它逐列滚动 我需要水平滚动逐像素平滑 我没有使用列 只有视觉网格线 垂直滚动不仅应该滚动右侧的区域 还应该滚动左侧的固定区域 与
  • Git - 不包括 {} 的颜色词

    我使用 git 和 color words 来查看我的差异 在我的差异中 它表明我删除了 b ljcount b nbsp nbsp nbsp Changes 我补充说 b skills limits b nbsp nbsp nbsp Ch
  • 避免 C/C++ 中内存泄漏的方法

    我可以使用哪些技巧来避免应用程序中的内存泄漏 在我当前的项目中 我使用一个工具 INSURE 来查找内存泄漏并生成报告 除了该工具之外 还有任何方法可以识别内存泄漏并克服它 有三种主要方法可以做到这一点 第一个是不会造成内存泄漏首先 防御性
  • AFL 警告:最后一个新路径:还没有(奇怪,请检查语法!)

    我有这个警告 最后一个新路径 还没有 奇怪 检查语法 在我尝试模糊文件后呈红色 我不知道为什么会发生这种情况 我用谷歌搜索也没有答案 我的命令是这样的 afl fuzz i testcases o findings tcpdump 4 6
  • 测试中模拟 EJB 注入

    每当我想测试一个使用资源注入的类时 我最终都会包含一个仅在测试中使用的构造函数 public class A EJB B b Used in tests to inject EJB mock protected A B b this b b
  • SFTP 路径格式与本地路径格式

    我正在编写一些 Java 代码 使用 JSch 库 通过 SFTP 到远程 Windows 计算机 并将文件复制到我的本地 Windows 文件夹 当指定远程计算机上的文件路径时 我被迫以以下格式指定路径 C temp myfile txt
  • Android MediaPlayer:基于 URI 播放 Raw 音频资源

    我试图解决的问题是在一个需要播放音频文件的活动中 大多数文件将由用户创建 并保存到外部存储中 因此使用以下代码播放 基于 Google 的示例代码 MediaPlayer mPlayer new MediaPlayer mPlayer se
  • python manage.py runserver、shell、dbshel​​l 在 git-bash 上冻结

    我试图在 Windows 的 git bash 上的 python virtualenv 中运行交互式 shell 但它没有运行 奇怪的是 它似乎没有做任何事情 只是光标在下一行上闪烁 没有给出任何输出 python manage py s
  • 如何在 EPPlus 中将数据透视表报表布局设置为表格?

    查看 EPPlus 附带的示例 我已成功创建数据透视表 但无法为其设置正确的报告布局 我希望它是 表格 而不是 轮廓 或其他什么 对我来说 EPPlus 现在似乎不支持这一点 但也许我错过了一些东西 事实证明 这比我想象的要容易得多 通过将
  • Android WebView:按钮响应非常滞后

    我制作了一个小网络应用程序来使用 Android 的 WebView 功能 我有一些用作按钮的 div 带有onclick属性 尝试该应用程序后 在设备的浏览器中 我立即注意到点击按钮后有很大的延迟 当我点击按钮和浏览器在其周围显示橙色突出
  • Python:停止正在等待用户输入的线程

    我试图让我的脚本在用户按下返回键时触发用户输入 然后主程序将检查 txUpdated 标志并使用该输入 我有一个在 python 中运行的线程 它只是等待用户输入 class InputThread threading Thread def
  • Eclipse IDE 支持 JSF 2.0 吗?

    我安装了 WTP 3 1 插件 还安装了 Glassfish v3 插件 我可以注册我的服务器 当我创建动态 Web 项目时 我可以看到可用的最大动态 Web 模块版本是 2 5 然后 我选择 Glassfish v3 的默认配置 但是当我
  • pandas if else 条件多列[重复]

    这个问题在这里已经有答案了 假设我有以下 df import pandas as pd data dic a 0 0 1 2 b 0 3 4 5 c 6 7 8 9 df pd DataFrame data dic Result a b c
  • 如何使用 R 调用/执行 imageJ 宏?

    我在 imageJ 中编写了一个宏 它会输出一个数据帧 然后在 R 中对其进行分析 我希望能够在 R 中完成整个过程 而不必先在 imageJ 中手动运行该宏 目前 宏会提示用户输入和输出目录 然后执行操作 我想 R 中一定有一个函数可以让
  • 在 Eclipse 中生成 JavaDocs 时出现“找不到模块”消息

    我正在尝试在我的应用程序中生成 JavaDocs 但是 当我尝试时 我收到以下消息 application src module info java 5 error module not found javafx base requires
  • 无法使用 exoPlayer 2.11 播放 MKV Matroska 视频

    当我尝试播放时在我的视频播放器中MKV Matroska文件保持静止 视频未播放 我跟着CodeLabs and ExoPlayer开发并构建可以播放的播放器 MP4但无法播放 MKV 这是我的播放器 exoplayer 2 11 5 pr
  • Pandas pd.Series.isin 集合与数组的性能

    一般来说 在 Python 中 可哈希集合的成员资格最好通过以下方式进行测试set 我们知道这一点是因为散列的使用为我们提供了 O 1 查找复杂度 而对于list or np ndarray 在 Pandas 中 我经常需要检查非常大的集合
  • System.Diaganostics.Process.Id 与任务管理器中显示的进程 ID 不同。为什么?

    我正在使用 C System Diagnostic Process object 它的属性之一是Id The Id这产生的与PID 如图所示Windows Task Manager 为什么是这样 你看 一旦这个过程开始 它启动了另外两个非托