Jak uzyskać pełną listę procesów w solaris bez przyciętych linii?

57

Czy istnieje sposób na wygenerowanie pełnego wykazu procesów w solaris bez przyciętych linii? Wypróbowałem pspolecenie z następującymi argumentami:

  -f Generuje pełną listę. (Patrz poniżej
                      znaczenie kolumn na pełnej liście
                      ing.)
  -l Generuje długą listę. (Patrz poniżej.)

Więc oba wydają się robić to, co chcę, jednak w dalszej części strony ps ps znajduję to:

 
 args Polecenie ze wszystkimi argumentami jako
                         strunowy. Implementacja może zostać obcięta
                         ta wartość do szerokości pola; to jest
                         zależne od implementacji, czy jakiekolwiek
                         następuje dalsze obcinanie. To jest
                         nieokreślony, czy ciąg
                         reprezentowana jest wersja argumentu
                         lista, jak została przekazana do polecenia
                         kiedy się zaczął, lub jest wersją
                         argumenty, ponieważ mogły zostać zmodyfikowane
                         przez aplikację. Aplikacje nie mogą
                         zależy od możliwości ich modyfikacji
                         lista argumentów i ta modyfikacja
                         zostanie odzwierciedlone w wynikach ps.
                         Implementacja Solaris ogranicza
                         ciąg do 80 bajtów; ciąg jest
                         wersja listy argumentów, jaka była
                         przekazane do polecenia, gdy się uruchomiło.

Co w zasadzie mówi, że dane wyjściowe zostaną obcięte i nic nie mogę na to poradzić. Więc idę tutaj. Z pewnością inni ludzie napotkali ten problem, a może nawet potrafili go obejść. Zgaduję, że ps nie może tego zrobić, więc muszę użyć innych narzędzi, aby to zrobić. Czy to jest dokładne?

Gabe.
źródło
Mówisz o pspoleceniu? Jeśli tak, zaktualizuj pytanie, aby było bardziej zrozumiałe.
phunehehe,
Tak, przepraszam ... moje początkowe majsterkowanie było przy użyciu polecenia ps, wyjaśniłem pytanie.
Gabe.

Odpowiedzi:

63

możesz spróbować

pargs <PID>

daje to listę wszystkich argumentów

lub użyj innego ps. Jeśli działa jako root (lub jakikolwiek użytkownik z wystarczającymi uprawnieniami do tego)

/usr/ucb/ps auxww

da ci wszystkie argumenty. Jego część SUNWscpu, „Zgodność źródła, (Usr)”

Marcel G.
źródło
pargspokazuje wewnętrzną kopię argumentów wiersza poleceń (i opcjonalnie środowisko). Dobrze wiedzieć, dziękuję!
Gilles 'SO - przestań być zły'
1
ten cały katalog / usr / ucb jest dla mnie nowy ... podoba mi się!
Gabe.
3
W systemie Solaris 11, jeśli użyjesz opcji bez myślnika (np. „/ Usr / bin / ps auxwww”), zostaną one potraktowane jako opcje stylu UCB, a dane wyjściowe pokażą bardzo długie linie, nawet jeśli NIE działasz jako root. To nie jest dobrze nagłośnione. Zobacz także: superuser.com/questions/148271/ps-command-in-solaris
Chris Quenelle
14

Jądro nie jest wymagane do śledzenia argumentów wiersza poleceń. Kiedy program jest uruchamiany przez execvewywołanie, jądro musi skopiować argumenty do pamięci procesu (aby były dostępne argvna przykład jak w programie C). Następnie jądro może odrzucić pamięć używaną do przechowywania początkowych argumentów wiersza poleceń. Proces może zastąpić swoją kopię argumentów. Więc po prostu może nie być śladu argumentów.

Niektóre warianty uniksowe przechowują kopię argumentów w jakiejś formie. Solaris udostępnia niektóre dane /proc/$pid. Począwszy od OpenSolaris 2009.06, jedyny ślad argumentów znajduje się w /proc/$pid/psinfo, gdzie są one połączone ze spacjami pomiędzy nimi (więc nie można rozróżnić między foo "one" "two"i foo "one two"), a wynikowy ciąg jest obcinany do 80 bajtów. To pole w /proc/$pid/psinfotym jest psdrukowane w argskolumnie.

Nawiasem mówiąc, opcje -fi -lkontrolują, które pola są drukowane, a nie to, czy pola są obcinane do pewnej szerokości.

Gilles „SO- przestań być zły”
źródło
To była również dobra odpowiedź, bardzo pouczająca. Polecenie pargs lepiej spełniło moją potrzebę, i to jest jedyny powód, dla którego wybrałem tę odpowiedź.
Gabe.
6
Więc po raz kolejny siedzimy tutaj w 2013 roku i nadal obcinamy łańcuchy do 80 bajtów, ponieważ w latach 70. mieliśmy terminale 80-char i „niektóre” programy jeszcze nie zrozumiały, że życie się zmieniło. I podoba nam się to, chwalimy to za „kompatybilność”! Powinniśmy się wstydzić samych siebie ...
Manjabes
1
@Manjabes haha! Ludzie, którzy zdecydują się nadal korzystać z Solaris, nie powinni narzekać na to, że system robi rzeczy w staro-skoolski sposób ;-) Solaris jest celowo powolny do zmiany, aby być bardziej kompatybilnym wstecz ze starszymi programami, które oczekują określonego zachowania. Jeśli chcesz systemu operacyjnego z dłuższą listą ps i bardziej fantazyjnymi możliwościami w programach narzędziowych, możesz zamiast tego użyć Linuksa.
JohnGH,
2

ps -epodaje listę wszystkich uruchomionych procesów. Jest też to ps -elf.

ari
źródło
2
Nawet użycie argumentu -l powoduje skrócenie informacji w wierszu poleceń
Lars Nordin,
1
Brak odpowiedzi na pytanie.
Konrad Gajewski
0

W zależności od tego, którego pspolecenia używasz, używam

ps -auxw
Wes
źródło
1
Wersja ps w systemie Solaris, która korzysta z argumentów Auxw, nie wymaga znaku wiodącego ”-„ Jeśli nie korzystasz z systemu Solaris, twoja odpowiedź nie jest istotna.
JohnGH,
0

prstat da ci aktualnie uruchomione procesy wraz z ich cenami i wykorzystaniem procesora.

użytkownik41052
źródło