Я написал программу в среде Eclipse. Сначала я выполняю это из Eclipse. После этого из окна терминала я просматриваю список своих процессов. Теперь я запускаю эту программу из командной строки и просматриваю список процессов.
Я вижу, что процесс перечислен с различными состояниями: когда программа выполняется из Eclipse, состояние S, когда программа выполняется из терминала, состояние S +.
В чем причина?
Когда вы запускаете процесс в терминале, его состояние процесса помечается + , потому что это процесс переднего плана в этом терминале. Это означает, среди прочего, что терминал может использоваться для управления процессом. Например, нажатие Ctrl-C
приведет к отправке сигнала SIGINT
процессу. В зависимости от обработчиков сигналов в программе, это обычно завершает процесс. Кроме того, закрытие терминала отправит в процесс сигнал SIGHUP*
.
Когда вы запускаете процесс из Eclipse, + там нет, потому что процесс не входит в группу процессов переднего плана какого-либо терминала. Фактически, если вы не запустили Eclipse с терминала (а не подключили его к &
или ^Z
), само Eclipse не будет иметь управляющего терминала, как и ни один из его дочерних процессов.
*) HUP для «зависания» со времен, когда терминалами были физические машины, которые подключались к компьютерам по последовательным линиям удаленного доступа