Как я могу получить PID Subshell?

Наиболее вероятная причина медленной работы - файл раскраска типа, вы можете избежать этого, отключив параметры цвета \ ls или / bin / ls .

Если у вас действительно так много файлов в каталоге, используйте ] find тоже неплохой вариант.

11
27.11.2018, 16:59
2 ответа

В дополнение к bash's $BASHPIDвы можете сделать это портативно с помощью:

pid=$(exec sh -c 'echo "$PPID"')

Пример:

(pid=$(exec sh -c 'echo "$PPID"'); echo "$$ $pid")

Вы можете превратить это в функцию:

# usage getpid [varname]
getpid(){
    pid=$(exec sh -c 'echo "$PPID"')
    test "$1" && eval "$1=\$pid"
}

Обратите внимание, что некоторые оболочки (, например. zshилиksh93)НЕ запускайте подпроцесс для каждой подоболочки, созданной с помощью (...); в этом случае $pidможет оказаться таким же, как $$, что правильно, потому что это PID процесса, из которого был вызван getpid.

14
27.01.2020, 19:57

В Linux кросс--решение оболочки (, по крайней мере, dash, bash, zsh ), которое не порождает новый процесс

read -r this_pid < /proc/self/stat; echo ${this_pid%% *}

По крайней мере, в bash и zsh мы также можем использовать пробел для чтения -разделитель:

read -d ' ' this_pid < /proc/self/stat ; echo $this_pid

См. также man 5 proc section /proc/[pid]/stat

1
26.10.2021, 00:44

Теги

Похожие вопросы