Как запустить отдельный процесс а не подпроцесс?

Ссылка скопирована
1 ответ

Я передаю в код java аргументы, потом на нажатие кнопки у меня срабатывает subprocess.run(java_args, creationflags=subprocess.CREATE_NO_WINDOW), и потом открывается майнкрафт, но он открывается в подпроцессах исполняемого кода, можно ли сделать так, чтобы он был отдельным процессом? На скриншоте показано как это выглядит

Как запустить отдельный процесс а не подпроцесс?

Дополнительно:

Ответы:

Судя по картинке, речь идет про Windows, поэтому ответ будет тоже чисто для Windows.
Сылка на процесс, запустивший данный (типа, на родительский) хоанится в структуре ядра, описывающий сам процесс - и, на самом деле, практически ни на что не влияет. Но если вам так хочется запустить процесс без родителя, запустите промежуточный процесс, запустите из него нужный вам процесс и завершите промежуточный процесс.

  • насколько я понимаю если завершить этот промежуточный процесс, то и основной процесс завершится
    так как он считался дочерним на момент завершения
  • solarkaaa, нет, не завершится: в Windows запускающий процесс никоим образом не владеет запускаемым, и ссылка на него в структуре данных, связанной с процессом - чисто информационная.
    Об этом можно прочитать в книге Windows Internals. У нее есть несколько изданий и есть их русские переводы "Внутреннее устройство Microsoft Windows". В русском переводе 6-го издания про это написано на стр.22.
Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Кирилл JS Ответ

Для запуска отдельного процесса в PHP можно использовать функцию `proc_open()`. Эта функция позволяет запустить процесс в отдельном окружении и получить доступ к его вводу/выводу. Вот пример использования:

$descriptorspec = [
    0 => ['pipe', 'r'], 
    1 => ['pipe', 'w'], 
    2 => ['file', '/tmp/error-output.txt', 'a']
];
 
$process = proc_open('php -r "echo \'Hello, world!\';"', $descriptorspec, $pipes);
 
if (is_resource($process)) {
    fclose($pipes[0]);
 
    echo stream_get_contents($pipes[1]);
 
    fclose($pipes[1]);
 
    $return_value = proc_close($process);
}

$descriptorspec = [ 0 => ['pipe', 'r'], 1 => ['pipe', 'w'], 2 => ['file', '/tmp/error-output.txt', 'a'] ]; $process = proc_open('php -r "echo \'Hello, world!\';"', $descriptorspec, $pipes); if (is_resource($process)) { fclose($pipes[0]); echo stream_get_contents($pipes[1]); fclose($pipes[1]); $return_value = proc_close($process); }

В этом примере мы запускаем процесс `php -r "echo 'Hello, world!';"`, который просто выводит строку "Hello, world!". Мы используем массив `$descriptorspec`, чтобы настроить ввод/вывод процесса. Затем мы читаем вывод процесса, закрываем каналы ввода и вывода, и закрываем процесс.

Обратите внимание, что функция `proc_open()` возвращает дескриптор процесса, который можно использовать для управления процессом. После выполнения процесса, необходимо закрыть дескриптор с помощью `proc_close()`.

Таким образом, используя функцию `proc_open()` вы можете запускать отдельные процессы в PHP и работать с их вводом/выводом.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно