java-процесс в Linux

#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 также завершает (отправляет сигнал) дочерний процесс.