Я знаю, что группировка commands(command-list)
создает подоболочку, и каждая перечисленная команда выполняется в этой подоболочке. Но если я выполняю простую команду в команде группировки (используйте команду ps
для вывода процессов), то процесс подоболочки не выводится. Но если я попытался выполнить список команд (составная команда) в команде группировки, то выводится процесс подоболочки. Почему он дает такой результат?
- Проверка выполнения простой команды (только команды
ps
) в команде группировки:
со следующим результатом:[root@localhost ~]# (ps -f)
UID PID PPID C STIME TTY TIME CMD root 1625 1623 0 13:49 pts/0 00:00:00 -bash root 1670 1625 0 15:05 pts/0 00:00:00 ps -f
- Еще один тест выполнения составной команды (списка команд) в команде группировки:
со следующим результатом:[root@localhost ~]# (ps -f;cd)
UID PID PPID C STIME TTY TIME CMD root 1625 1623 0 13:49 pts/0 00:00:00 -bash root 1671 1625 0 15:05 pts/0 00:00:00 -bash root 1672 1671 0 15:05 pts/0 00:00:00 ps -f
Я протестировал множество других команд (составных команд и простых команд), но результаты такие же. Я предполагаю, что даже если я выполню простую команду в команде группировки, bash
должен разветвить процесс подоболочки, иначе он не сможет выполнить команду. Но почему я не вижу этого?
(echo $BASH_SUBSHELL)
для вывода уровня подоболочки и используйтеecho $BASHPID
(bash ver › 4) для вывода идентификатора текущего процессаbash
- person anubhava   schedule 16.06.2019bash
при запуске(ps -f & cd)
. Это заставляет меня думать, что это может быть проблема времени. - person l0b0   schedule 16.06.2019ps -o ppid=$(pidof ps)
, затем с группировкой(ps -o ppid=$(pidof ps))
, затем с группировкой и добавленной:
командой бездействия(ps -o ppid=$(pidof ps) ; :)
. Первые два выводят одинаковые два числа, последний выводит те же два и еще одно. - person agc   schedule 16.06.2019