Jawaban:
Anda bisa menggunakan pgrep sudountuk mendapatkan semua proses sudo, lalu ps h --ppid $THEPID -o piduntuk mendapatkan proses turunannya dan akhirnya pwdx $SUBPIDuntuk mendapatkan direktori kerja dari subproses ini.
Anda akhirnya bisa meringkasnya menjadi dua untuk loop, yang bisa terlihat seperti ini:
for sudo in `pgrep sudo`; do
sudo pwdx $sudo;
for subsudo in `ps h --ppid $sudo -o pid`; do
sudo pwdx $subsudo
done
done
Karena Anda hanya mendapatkan satu generasi proses anak dengan setiap panggilan ps, jumlah proses proses anak harus diperoleh secara rekursif. Script berikut melakukan ini:
#!/bin/bash
function getchildren()
{
echo $1
children=`ps h --ppid $1 -o pid`
if [[ -n $children ]]; then
for child in $children; do
getchildren $child
done
fi
}
for sudo in `pgrep sudo`; do
for subsudo in `getchildren $sudo`; do
sudo pwdx $subsudo
done
done | sort | uniq
Output diurutkan dan garis ganda dihapus jika seseorang menjalankan sudoproses dari dalam sudo susesi.