Tôi đã sử dụng Mac OS 10.7 Lion, nhưng tôi nghĩ điều này sẽ khá dễ dàng đối với các hệ vỏ giống Bourne trên các hệ thống giống Unix khác. Bạn có thể gặp sự cố với lệnh lệnh trong đối số cho ps.
tôi đặt đoạn mã sau vào một file có tên procsup.sh, trong đó xác định một chức năng vỏ đi theo cha mẹ của quá trình lên để xử lý ID 1. (Tôi thường thấy các chức năng vỏ dễ dàng hơn để làm việc với hơn bí danh.)
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)
}'
}
Sau đó, tôi bắt đầu một shell và nguồn gốc procsup.sh. Trong cuộc sống thực, bạn sẽ đảm bảo rằng các shell mới của bạn sẽ tự động nguồn procsup.sh khi bắt đầu, có thể là trong .bashrc cá nhân của bạn. Đầu tiên tôi kiểm tra tổ tiên từ vỏ đó. Sau đó, tôi bắt đầu vi từ vỏ đó. Như thường lệ, sự tương tác với vi đã không làm cho nó vào bảng điểm cho đến khi tôi đã :shell
. cửa sổ terminal của tôi trông như thế này:
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$
Nguồn
2012-08-11 04:53:36
Có lẽ tôi sai, nhưng có vẻ như pstree rằng, cùng với bạn phiên bản nghèo của con người, chỉ cho thấy những đứa trẻ của một quá trình. Lưu ý rằng tôi không thể sử dụng đúng phiên bản của bạn, vì 'ps' của Mac khá kém và không hỗ trợ' cmd'. Tôi muốn thấy mối quan hệ giữa init và quá trình hiện tại. Có đoán không? –
Có vẻ như OS X đang sử dụng 'comm' thay vì' cmd' trong lệnh 'ps'. –
phiên bản của người đàn ông nghèo chỉ nhận được tất cả các quá trình cha mẹ và con cái của họ với nhau. Đó là tất cả. – ghostdog74