Skip to content

Starting new Process as not child of the application #104210

@dpeter99

Description

@dpeter99

Description

I'm trying to start a new Process in a multiplatform way (Win and Linux) and make the new process not a child process of the running C# App.

I found this code snippet online for running a process as non-child:

ProcessStartInfo psi = new ProcessStartInfo("YourExecutable.exe");
psi.UseShellExecute = true;
Process.Start(psi);

This still spawns the new process as a child process.

After a lot of searching, I ended up with this setup:

var linux = new ProcessStartInfo("/usr/bin/sh", new []
{
    "-c",
    "nohup /usr/bin/java"+
    " -Xmx1024M" +
    " -Xms1024M" +
    " -jar " +
     _serverJar.FullName +
    "" +
    " &"
})
{
     WorkingDirectory = _serverFolder.FullName,
     UseShellExecute = true,
};

However, this is not easily portable and requires the actual arguments to be already concatenated, which makes some mistakes possible.

With this workaround, we also lose the PID of the new process which is a must in my use case.

Reproduction Steps

Try to use the first example to spawn a new process as non-child, on a Linux system.

Expected behavior

There should be an easy way to run a process as non-child that works on all platforms.

Actual behavior

The spawned process is a child of the app and is terminated when the c# app exits.

Regression?

No response

Known Workarounds

It is possible to call /bin/sh with the nohup and & to instruct it to make a new detached process, but this is not a portable setup.

Configuration

.NET 8
Linux (Fedora 40)
x64

Other information

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions