Além de bash
' $BASHPID
, você pode portá-lo com:
pid=$(exec sh -c 'echo "$PPID"')
Exemplo:
(pid=$(exec sh -c 'echo "$PPID"'); echo "$$ $pid")
Você pode transformá-lo em uma função:
# usage getpid [varname]
getpid(){
pid=$(exec sh -c 'echo "$PPID"')
test "$1" && eval "$1=\$pid"
}
Observe que alguns shells (por exemplo, zsh
ou ksh93
) NÃO iniciam um subprocesso para cada subshell criado com (...)
; Nesse caso, $pid
pode ser o mesmo que $$
, o que é correto, porque esse é o PID do processo getpid
foi chamado.