我想在c#中创建一个看门狗,其中用户通过他的pid选择一个进程,然后是他消耗ram和CPU的应用程序监视,之后,如果该应用程序通过min消耗然后重新启动进程,那么他的CPU和ram去再次到0。
我的问题是当我想重新启动进程时,因为我可以通过他的pid获取进程,但无法重新启动,因为他想要应用程序的路径但是我不想重新启动整个应用程序我只想重启那个特定的进程
我怎么能做到这一点?可以这样做吗?
升级:
好吧,我认为通过一个例子可以更好地理解,所以这里是:
首先,想象一下我想用应用程序Microsoft Edge的pid 12780来查看进程。
其次,当这个过程超过我在看门狗中设置的RAM或CPU的最小消耗时,该过程应该重新启动,从RAM和CPU开始为0。
但是这里有问题,如果我想重新启动那个进程我可以杀了它,是的,但我无法启动它,即使我设置了我的应用程序的完整路径(在这种情况下是Microsoft Edge)它也无法启动再次。
那么,我如何只重启那个进程不是完整的应用程序?
使用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?检索环境变量
不,没有办法做你想做的事。
如果您想重新启动一个完整的应用程序,那么这是可能的,但是您可能会丢失一些数据。
但是,您说您只想重新启动应用程序的一部分,例如其中一个进程,这是不可能的,除非应用程序本身特别支持 - 通常情况并非如此。
让我们解释一下原因。
当应用程序决定创建一个新进程时,该进程会获得当时父进程内存的副本(简化但仍然是),之后两个进程都开始偏离该状态,因此它不再存在。
是否可以创建允许您重新启动其进程的应用程序?是。但大多数应用程序都不允许您这样做,并且甚至不清楚重新启动进程意味着什么。