#java #linux #process
#java #linux #процесс
Вопрос:
Я запустил тестовую Java-программу в Linux в качестве testuser
, как показано ниже.
su testuser -c "./java Test" amp;
Когда я вижу процессы, я вижу, что создано 2 процесса.
Один как root, и это порождает другой, принадлежащий testuser.
# ps -ef | grep Test
root 19684 19522 0 19:18 pts/0 00:00:00 su testuser -c ./java Test
testuser 19685 19684 1 19:18 pts/0 00:00:00 ./java Test
root 19699 19522 0 19:18 pts/0 00:00:00 grep Test
Почему здесь созданы 2 процесса?
Даже после того, как я завершу процесс, принадлежащий root, другой продолжает выполняться. Созданы ли здесь 2 Java-процесса?
Когда я запускаю свое веб-приложение [tomcat-spring] в качестве тестируемого пользователя, я вижу только один созданный процесс. Почему здесь только один процесс?
Ответ №1:
- процесс с идентификатором 19684 — это команда su, которую вы запустили.
- затем сам процесс su запускает java-процесс как дочерний процесс с другим идентификатором пользователя
- третий столбец в выводе выше на самом деле является идентификатором родительского процесса, из которого вы можете видеть, что процесс Java имеет процесс 19684 (процесс su) в качестве родительского
Уничтожение дочернего процесса (19685) также должно привести к завершению su
процесса (по крайней мере, в моей системе).
Пробуя это в моей системе с помощью sleep 3600
вместо java
, я вижу, что при завершении su
процесса su также завершает (отправляет сигнал) дочерний процесс.