Existuje způsob, jak vygenerovat úplný seznam procesů v systému Solaris bez zkrácených linií? Vyzkoušel jsem příkaz ps
s následujícími argumenty:
-f Vytvoří úplný seznam. (Viz níže Význam sloupců v úplném seznamu - Ing.)
-l Vytvoří dlouhý výpis. (Viz. níže.)
Zdá se tedy, že oba dělají to, co chci, ale dále na stránce ps ps, najdu toto:
args Příkaz se všemi argumenty jako řetězec . Implementace může zkrátit Tuto hodnotu na šířku pole; Závisí na implementaci , zda dojde k dalšímu zkrácení . Není specifikováno, zda reprezentovaný řetězec Je verzí seznamu argumentů , Jak byl předán příkazu , Když byl spuštěn, nebo je verzí argumenty , které mohly být aplikací změněny . Aplikace nemohou Záviset na tom, že budou moci upravit svůj seznam Argumentů a že se tato modifikace - Promítne do výstupu ps. Implementace Solaris omezuje řetězec na 80 bajtů; řetězec je verzí seznamu argumentů tak, jak byl předán příkazu, když byl spuštěn.
Což v podstatě říká, že výstup bude zkrácen a s tím nemůžu nic dělat. Takže jdu sem. Určitě ostatní lidé narazili na tento problém a možná dokonce mají cestu kolem něj. Hádám, že to ps nemůže udělat, a tak k tomu potřebuji použít jiné nástroje. Je to přesné?
můžete to zkusit
pargs <PID>
tím získáte seznam všech argumentů
nebo použít jiné ps. Pokud běží jako root (nebo jakýkoli uživatel s dostatečnými oprávněními)
/usr/ucb/ps auxww
vám dá všechny argumenty. Jeho součást SUNWscpu, „Compatibility Source, (Usr)“
Jádro není nutné pro sledování argumentů příkazového řádku. Když je program spuštěn pomocí volání execve
, musí jádro zkopírovat argumenty do procesní paměti (aby byly například k dispozici jako argv
v programu C). Poté může jádro zahodit paměť používanou k uložení počátečních argumentů příkazového řádku. Proces smí přepsat jeho kopii argumentů. Takže nemusí existovat žádná stopa argumentů.
Některé unixové varianty uchovávají kopii argumentů v nějaké podobě. Solaris vystavuje některá data v /proc/$pid
. Od OpenSolaris 2009.06 je jediná stopa argumentů v /proc/$pid/psinfo
, kde jsou zřetězeny mezerami mezi nimi (takže není možné rozlišovat mezi foo "one" "two"
a foo "one two"
) a výsledný řetězec bude zkrácen na 80 bajtů. Toto pole v /proc/$pid/psinfo
je to, co ps
tiskne ve sloupci args
.
Mimochodem, -f
a -l
volby určují, která pole budou vytištěna, nikoli zda budou pole zkrácena na určitou šířku.
ps -e
Uvádí seznam všech spuštěných procesů. Také je tu tento ps -elf
.
Podle toho, jaký příkaz ps
použijete, používám
ps -auxw
prstat
vám poskytne aktuálně spuštěné procesy spolu s jejich pids a využitím CPU.