我想在C#中创建一个看门狗,其中用户通过其pid选择一个进程,然后监视消耗的ram和CPU的应用程序,如果该应用程序超过了最小消耗量,则重新启动该进程,以便其CPU然后ram再次回到0。
我的问题是当我想重新启动进程时,因为我可以通过他的pid获得该进程,但是由于他想要应用程序的路径,但又不想重新启动整个应用程序,因此无法再次启动,我只想重新启动具体过程
我该如何实现? 可以这样做吗?
升级:
好吧,我认为通过示例可以更好地理解它,所以这里是:
首先,假设我想用Microsoft Edge应用程序的pid 12780监视该过程。
第二,当此进程超出我在看门狗中设置的RAM或CPU的最小消耗量时,该进程应重新启动,以RAM和CPU的值从0开始。
但这是问题,如果我想重新启动该进程,可以将其终止,是的,但之后无法启动,即使我设置了应用程序的完整路径(在本例中为Microsoft Edge),也可以不会再开始。
那么,我如何仅重新启动该过程而不是整个应用程序?
答案 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)
不,没有办法做你想做的事。
如果您想重新启动完整的应用程序,则可以,但是可能会丢失一些数据。
但是,您说您只想重新启动应用程序的一部分(例如进程之一),这是不可能的,除非应用程序本身特别支持它(通常不是这种情况)。>
解释原因。
当应用程序决定创建一个新进程时,该进程会在那一刻获得父进程内存的副本(但仍是简化的),然后这两个进程开始偏离该状态,因此它不会不再存在。
是否可以创建允许您重新启动其进程的应用程序?是。但是大多数应用程序都不允许您这样做,而且甚至不总是清楚重新启动进程的含义。