Próbuję stworzyć menedżera serwera, ale muszę pobrać identyfikatory procesów i komendy niektórych procesów.
Na przykład:
ps ax | grep ./skulltag
4760 pts/2 Tl 0:02 ./skulltag-server
4793 pts/2 Tl 0:01 ./skulltag-server
4956 pts/2 Tl 0:01 ./skulltag-server -port 13000
4958 pts/2 Tl 0:26 ./skulltag-server -port 13001
W jaki sposób mogę go tylko zwrócić proces, tylko zwrócić polecenie (./skulltag-server) lub oba? Dzięki.
Odpowiedzi:
3 dla odpowiedzi № 1Możesz potokować do awk aby wybrać pole do wydrukowania
Na przykład. ps ax | grep ./skulltag | awk "{ print $1 }"
wydrukuje pierwszą kolumnę (pid)
Zauważ, że możesz również zajrzeć do opcji -o do ps zmienić jego wyjście
3 dla odpowiedzi № 2
Myślę, że powinieneś używać awk
ps ax | grep ./skulltag | awk "{print $1}" # Or $5, or $1 and $5
To da ci listę identyfikatorów procesowych.
3 dla odpowiedzi nr 3
W celu uzyskania identyfikatorów procesowych można również użyć niestandardowego, ale poręcznego pgrep
.
ps ax | grep ./skulltag | awk "{ print $1 }"
Z grubsza odpowiada:
pgrep skulltag
1 dla odpowiedzi nr 4
Możesz przeanalizować wyniki ps ax
za pomocą awk
wyodrębnić kolumny, które chcesz:
aix@aix:~/tmp$ ps ax | grep bash
1906 pts/5 Ss+ 0:00 bash
13749 pts/31 Ss 0:00 bash
27315 ? SN 0:00 /bin/bash /etc/cron.daily/backup
27648 pts/31 S+ 0:00 grep --color=auto bash
aix@aix:~/tmp$ ps ax | grep bash | awk "{print $1}"
1906
13749
27315
27652
aix@aix:~/tmp$ ps ax | grep bash | awk "{print $5}"
bash
bash
/bin/bash
grep