Я ищу, чтобы выполнить процесс в Mono (C#) в ящике Linux, но мне нужно, чтобы он продолжал работать после выхода моего .exe. Я пытаюсь использовать nohup для этого, но до сих пор не имел никакого успеха. Это мой код прямо сейчас:Как выполнить процесс в моно с nohup?
void Execute(string command, string commandPath, string arguments, bool nohup = false)
{
ProcessStartInfo startInfo = new ProcessStartInfo()
{
FileName = nohup ? "sh" : Path.Combine(commandPath, script),
Arguments = nohup ? "nohup " + Path.Combine(commandPath, script) + " " + arguments + " &" : arguments,
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true,
RedirectStandardError = true,
RedirectStandardInput = true,
UserName = System.Environment.UserName
};
using (Process process = Process.Start(startInfo))
{ // Monitor for exit}
}
Так я проверяю параметр поЬира и если это правда, я исполняю оболочку и отправить полную команду (например: nohup /path/to/my/command <args> &
). Я получаю сообщение об ошибке /path/to/my/command cannot execute binary file
.
Другая вещь, о которой я подумал, - это открытие процесса sh, а затем отправка полной команды nohup в стандартный ввод, но для этого мне пришлось бы реорганизовать совсем немного кода, поэтому, если есть способ делать то, что я хочу без этого, я бы пошел по этому пути.
Итак ... Каков наилучший способ выполнения процесса на C# в среде Linux (Mono), который использует nohup, чтобы оставаться в живых после того, как родительский процесс умер?