Utilicé Mac OS 10.7 Lion, pero creo que será bastante portátil para cartuchos similares a Bourne en otros sistemas tipo Unix. Puede tener problemas con la palabra clave del comando en el argumento de ps.
pongo el siguiente código en un archivo llamado procsup.sh, que define una función de shell para seguir los padres del proceso para procesar ID 1. (a menudo encuentro funciones de shell más fácil de trabajar que el alias.)
procsup()
{
leaf=$$
ps -eo pid,ppid,command | awk -v leaf="$leaf" \
'{parent[$1]=$2;command[$1]=$3;}
function print_ancestry(pid)
{
print pid " (" command[pid] ") child of " parent[pid];
if(pid!=1) print_ancestry(parent[pid])
};
END{\
print_ancestry(leaf)
}'
}
Luego comencé un shell y obtuve procsup.sh. En la vida real, se aseguraría de que sus nuevos shells se originaran automáticamente procsup.sh cuando se iniciaran, tal vez en su .bashrc personal. Primero revisé la ascendencia de ese caparazón. Entonces comencé vi desde ese caparazón. Como de costumbre, la interacción con vi no llegó a la transcripción hasta que lo hice :shell
. Mi ventana de terminal se veía así:
Mariel:~/Library/Scripts 1j david$
Mariel:~/Library/Scripts 1j david$
Mariel:~/Library/Scripts 1j david$ . procsup.sh
Mariel:~/Library/Scripts 1j david$ procsup
41926 (-bash) child of 41922
41922 (login) child of 41917
41917 (/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal) child of 19281
19281 (/sbin/launchd) child of 1
1 (/sbin/launchd) child of 0
Mariel:~/Library/Scripts 1j david$
Mariel:~/Library/Scripts 1j david$
Mariel:~/Library/Scripts 1j david$ vi
bash-3.2$ # Have just done :shell.
bash-3.2$ . procsup.sh
bash-3.2$ procsup
42325 (/bin/bash) child of 42324
42324 (vi) child of 41926
41926 (-bash) child of 41922
41922 (login) child of 41917
41917 (/Applications/Utilities/Terminal.app/Contents/MacOS/Terminal) child of 19281
19281 (/sbin/launchd) child of 1
1 (/sbin/launchd) child of 0
bash-3.2$
bash-3.2$
Tal vez me equivoque, pero parece que pstree, junto con usted versión del hombre pobre, sólo muestra los niños de un proceso. Tenga en cuenta que no pude usar su versión correctamente, ya que el 'ps' de Mac es bastante pobre y no admite' cmd'. Me gustaría ver la relación entre init y el proceso actual. ¿Alguna conjetura? –
Parece que OS X está usando 'comm' en lugar de' cmd' en el comando 'ps'. –
la versión del pobre simplemente hace que todos los procesos parentales y sus hijos estén juntos. Eso es todo. – ghostdog74