如果不是调用进程的子进程,我将如何开始新进程.
例:
主程序(Caller.exe)
process.start("file.exe")
Run Code Online (Sandbox Code Playgroud)
图片:
我正在使用Process类在ASP.NET Core(.NET Framework)中生成子进程:
var process = new Process
{
StartInfo = new ProcessStartInfo(executableDir)
{
Arguments = commandDefinition.CommandDef.ArgumentsAsString,
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false,
CreateNoWindow = true,
WorkingDirectory = _contentPath,
},
};
process.Start()
Run Code Online (Sandbox Code Playgroud)
据我所知,当父(ASP.Net Core)进程被杀死时,子进程应该保持活跃状态.我使用两个控制台应用程序测试了这种行为,并且在杀死父进程后,子进程永远不会被杀死 但是,当我在ASP.NET Core中生成一个新进程时,子进程在以下情况下被杀死:
如果通过任务管理器杀死父级,它不会被杀死.(经过一些测试后并非总是如此)
从上面我怀疑ASP.NET Core中有一种机制可以在成功退出时杀死所有子进程.它在某处记录了吗?有没有办法避免它?我找不到有关此类行为的任何信息.
编辑:repro实际上非常简单.
Startup班级 var process = new Process
{
StartInfo = new ProcessStartInfo("calc.exe")
{
RedirectStandardOutput = true,
RedirectStandardError = true,
UseShellExecute = false, …Run Code Online (Sandbox Code Playgroud) 我有两个进程,A 和 B。在某个时刻 A 创建了 B。创建 B 后,如果 A 的进程树被终止,我希望 B 仍然存在。
我正在使用 CreateProcess() 创建 B,但我似乎找不到任何方法让它在不成为子进程的情况下创建进程。与 ShellExecuteEx() 相同,但我可能缺少一些标志。
有谁知道我可以用什么来做到这一点?
编辑:我忘了提到两个进程都需要另一个进程的句柄或进程 ID