如何仅通过其pid重新启动进程?

时间:2018-12-27 15:51:36

标签: c# .net

我想在C#中创建一个看门狗,其中用户通过其pid选择一个进程,然后监视消耗的ram和CPU的应用程序,如果该应用程序超过了最小消耗量,则重新启动该进程,以便其CPU然后ram再次回到0。

我的问题是当我想重新启动进程时,因为我可以通过他的pid获得该进程,但是由于他想要应用程序的路径,但又不想重新启动整个应用程序,因此无法再次启动,我只想重新启动具体过程

我该如何实现? 可以这样做吗?

升级:

好吧,我认为通过示例可以更好地理解它,所以这里是:

首先,假设我想用Microsoft Edge应用程序的pid 12780监视该过程。

enter image description here

第二,当此进程超出我在看门狗中设置的RAM或CPU的最小消耗量时,该进程应重新启动,以RAM和CPU的值从0开始。

但这是问题,如果我想重新启动该进程,可以将其终止,是的,但之后无法启动,即使我设置了应用程序的完整路径(在本例中为Microsoft Edge),也可以不会再开始。

那么,我如何仅重新启动该过程而不是整个应用程序?

2 个答案:

答案 0 :(得分:7)

使用How to get the full path of running process?获取用于启动进程的可执行文件后,您也许可以重新启动它。

但是,如果可执行文件以特定方式(例如工作文件夹,启动参数,环境变量等)启动,则其运行方式可能与以前的启动方式不同。可以使用以下答案来检索这些特殊设置:https://stackoverflow.com/a/5497319/563088(命令行结果)

可以使用How to get the Process Environment Block (PEB) from extern process?

检索环境变量

答案 1 :(得分:0)

不,没有办法做你想做的事。

如果您想重新启动完整的应用程序,则可以,但是可能会丢失一些数据。

但是,您说您只想重新启动应用程序的一部分(例如进程之一),这是不可能的,除非应用程序本身特别支持它(通常不是这种情况)。

解释原因。

当应用程序决定创建一个新进程时,该进程会在那一刻获得父进程内存的副本(但仍是简化的),然后这两个进程开始偏离该状态,因此它不会不再存在。

是否可以创建允许您重新启动其进程的应用程序?是。但是大多数应用程序都不允许您这样做,而且甚至不总是清楚重新启动进程的含义。