Мне интересно, есть ли способ запустить дочерний процесс (не как фоновый процесс) и получить его PID, возможно, выводя его в файл.

Я запускаю процесс в bash-скрипте, а именно в java, и я хотел бы иметь возможность выводить PID этого java-процесса в файл, чтобы я мог использовать его в других скриптах. Проблема в том, что я не запускаю Java как фоновый процесс, поэтому я не могу использовать $! , Любые идеи о том, как я буду выводить PID процесса java который я только что начал в файл?

Обратите внимание, что этот Java-процесс не будет единственным Java-процессом, работающим в системе - если я получу эту работу, я выведу дочерний процесс для разных Java-процессов в разные файлы.

Единственное, о чем я подумал, это возможность запуска фонового процесса, который знает PID текущего скрипта bash, перед запуском java. Затем с помощью этого фонового процесса найдите дочерний процесс из сценария bash. Я не знаю точно, как это реализовать.

1 ответ1

1

Лучшее решение, вероятно, состоит в том, чтобы заставить само приложение сделать это.  Если это не вариант, попробуйте обернуть приложение в скрипт оболочки:

#!/bin/sh
echo My pid is $$.
exec /the/real/path/to/the/app

Ключом является команда exec , которая заставляет оболочку (процесс, который обрабатывает скрипт) запускать эту последнюю программу без разветвления , поэтому она (приложение) принимает процесс и наследует его PID.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .