GNU/Linux >> Znalost Linux >  >> Linux

Jak dosáhnout toho, aby se pro konkrétní proces spustil pouze uživatel, pid a příkaz? (Ubuntu 11.10)

Předpokládám, že hledáte argument -o:

-o formát:

user-defined format.format je jediný argument ve formě seznamu odděleného prázdnou nebo čárkou, který nabízí možnost specifikovat jednotlivé výstupní sloupce. Rozpoznaná klíčová slova jsou popsána níže v části SPECIFIKACE STANDARDNÍCH FORMÁTŮ. Záhlaví lze podle potřeby přejmenovat (ps -o pid,ruser=RealUser -o comm=Příkaz). Pokud jsou všechna záhlaví sloupců prázdná (ps -o pid=-o comm=), řádek záhlaví se nevypíše. Šířka sloupce se podle potřeby zvětší u širokých záhlaví; to může být použito k rozšíření sloupců, jako je WCHAN(ps -o pid,wchan=ŠIROKÝ-WCHAN-SLOUPEK -o comm). Explicitní řízení šířky (ps opid,wchan:42,cmd) je také nabízeno. Chování ps -o pid=X,comm=Y se liší podle osobnosti; výstup může být jeden sloupec s názvem "X,comm=Y" nebo dva sloupce s názvem "X" a "Y". V případě pochybností použijte více možností. Použijte proměnnou prostředí PS_FORMAT k zadání výchozího nastavení podle potřeby; DefSysV a DefBSD jsou makra, která lze použít k výběru výchozích sloupců UNIX nebo BSD.

Takže požadovaný příkaz by byl (Ubuntu):

ps -o uid,pid,cmd -ef|grep python

pod OpenSolaris je příkaz:

ps -o ruser,pid,comm -ef|grep python

Nejjednodušší by asi bylo:

$ ps o uid=,pid=,cmd= -C python
1000 26126 python

Tímto způsobem získáte vše přímo z ps a nemusíte nic analyzovat.

Z ps manuálová stránka:

-o formát

Uživatelsky definovaný formát. format je jeden argument ve formě seznamu odděleného prázdnými znaky nebo čárkami, který nabízí způsob, jak určit jednotlivé výstupní sloupce. [...] Záhlaví lze podle potřeby přejmenovat (ps -o pid,ruser=RealUser -o comm=Command). Pokud jsou všechna záhlaví sloupců prázdná (ps -o pid=-o comm=), nebude řádek záhlaví vypsán.

-C cmdlist
     Select by command name.  This selects the processes whose executable 
     name is given in cmdlist.

-C volba bude fungovat, pokud používáte python interaktivně, ne pokud python spouští skript. V takovém případě byste měli použít -C scriptname.py místo toho.


ps -eo user,pid,cmd | grep [p]ython

Příklad:

$ ps -eo user,pid,cmd | grep [p]ython
root      1056 /usr/bin/python3 /usr/bin/networkd-dispatcher --run-startup-triggers
root      1735 /usr/bin/python3 /usr/bin/fail2ban-server -xf start
user     16613 /usr/bin/python3 /usr/share/system-config-printer/applet.py

Vysvětlení:

  • -e všechny procesy
  • -o uživatelsky definovaný formát
  • user,pid,cmd Zobrazit uživatele, ID procesu, sloupce příkazů

Poznámka: pokud používáte -f s -o jak jiní navrhli, můžete dostat chyby. Je to proto, že oba tyto parametry řídí výstupní formát a měl by být použit pouze jeden z nich:

$ ps --help | grep -A 2 "output format"
*********** output format **********
-o,o user-defined  -f full
-j,j job control   s  signal

Linux
  1. Jak spustit příkaz „najít“ pouze v aktuálním adresáři a ne v podadresářích

  2. Jak najdu ID procesu v Ubuntu?

  3. Jak zajistím, aby můj webový server Golang běžel na pozadí?

  1. Jak získat ID procesu pro ukončení procesu nohup?

  2. Jak spustit příkaz jako konkrétní uživatel ve skriptu init?

  3. Jak nastavit ID procesu v Linuxu pro konkrétní program

  1. Jak mohu získat aktuální datum a čas v terminálu a nastavit pro něj vlastní příkaz v terminálu?

  2. Jak přimět systém Ubuntu, aby se spustil a běžel zcela v paměti RAM?

  3. Jak získat pid procesu a vyvolat na něj kill -9 ve skriptu shellu?