В неэффективном мире было бы задействовано несколько процессов:
<the shell> 1234
|
|
sudo 4595
|
|
nohup 4596
|
|
nice 4597
|
|
java 4598
$!
относится только к процессу, запускаемому в фоновом режиме самой оболочкой, то есть к процессу, который запускается sudo
,java
, процесс, который вас интересует, находится в процессе 4598. Вам нужно будет использовать ps
(или некоторые другие инструменты), чтобы получить этот идентификатор процесса, так как оболочка его не узнает.
В мире real задействовано не так много процессов, поскольку не каждая работа в приведенной выше цепочке должна создавать новый процесс;некоторые из них могут просто использовать exec
, чтобы заменить себя программой, которую они запускают.Я думаю , что sudo
и nice
оба делают это (nohup
должен запустить новый процесс в другой группе процессов, чтобы он сделал то, что он делает).Таким образом, цепочка больше похожа на
<the shell> 1234
|
|
sudo/nohup 4595
|
|
nice/java 4596
Но конечный результат тот же;оболочка не может получить идентификатор процесса, в котором, в конечном счете, запускается java
.