mywiki/linux/processes.md

10 KiB

Monitorare i processi di sistema

Il comando ps visualizza un elenco dei processi avviati dall'utente che ha eseguito il comando.

ps

    PID TTY          TIME CMD
  59401 pts/2    00:00:00 bash
  59409 pts/2    00:00:00 ps

Le quattro colonne sono:

  • PID: il numero ID del processo;
  • TTY: il nome della shell a cui l'utente è connesso;
  • TIME: il tempo di elaborazione della CPU utilizzato dal processo;
  • CMD: il nome del comando che ha avviato il processo

Con l'opzione -e vengono elencati i processi di tutti gli utenti:

ps -e | less

    PID TTY          TIME CMD
      1 ?        00:00:02 systemd
      2 ?        00:00:00 kthreadd
      3 ?        00:00:00 rcu_gp
      4 ?        00:00:00 rcu_par_gp
      5 ?        00:00:00 slub_flushwq
      6 ?        00:00:00 netns
      8 ?        00:00:00 kworker/0:0H-events_highpri
     10 ?        00:00:00 mm_percpu_wq
     11 ?        00:00:00 rcu_tasks_kthread
     12 ?        00:00:00 rcu_tasks_rude_kthread
     13 ?        00:00:00 rcu_tasks_trace_kthread
     14 ?        00:00:00 ksoftirqd/0
     15 ?        00:00:16 rcu_preempt

Gerarchia dei processi

È possibile vedere quali processi ne hanno avviati altri con l'opzione -H (hierarchy). La rientranza indica i processi figli:

ps -eH | less

    PID TTY          TIME CMD
    945 ?        00:00:00   sddm
    971 tty7     00:13:47     Xorg
   1398 ?        00:00:00     sddm-helper
   1431 ?        00:00:00       startplasma-x11
   1507 ?        00:00:00         ssh-agent
   1618 ?        00:00:00         plasma_session
   1658 ?        00:08:12           kwin_x11
   1694 ?        00:00:03           ksmserver
   1718 ?        00:03:31           plasmashell
   1720 ?        00:00:03           kaccess
   1721 ?        00:00:01           xembedsniproxy
   1722 ?        00:00:03           org_kde_powerde
   1723 ?        00:00:02           polkit-kde-auth
   1737 ?        00:00:01           gmenudbusmenupr
   1742 ?        00:00:03           DiscoverNotifie
   1758 ?        00:00:02           kalendarac
   1763 ?        00:00:10           nextcloud
   1773 ?        00:00:00           agent
    956 ?        00:00:00   sshd

L'opzione --forest aggiunge chiarezza nella visualizzazione della parentela:

ps -eH --forest | less

    PID TTY          TIME CMD
    945 ?        00:00:00 sddm
    971 tty7     00:13:54  \_ Xorg
   1398 ?        00:00:00  \_ sddm-helper
   1431 ?        00:00:00      \_ startplasma-x11
   1507 ?        00:00:00          \_ ssh-agent
   1618 ?        00:00:00          \_ plasma_session
   1658 ?        00:08:17              \_ kwin_x11
   1694 ?        00:00:03              \_ ksmserver
   1718 ?        00:03:34              \_ plasmashell
   1720 ?        00:00:03              \_ kaccess
   1721 ?        00:00:02              \_ xembedsniproxy
   1722 ?        00:00:03              \_ org_kde_powerde
   1723 ?        00:00:02              \_ polkit-kde-auth
   1737 ?        00:00:02              \_ gmenudbusmenupr
   1742 ?        00:00:03              \_ DiscoverNotifie
   1758 ?        00:00:02              \_ kalendarac
   1763 ?        00:00:10              \_ nextcloud
   1773 ?        00:00:00              \_ agent
    956 ?        00:00:00 sshd

Ottenere più informazioni

Utilizzando l'opzione -F (extra full-format) vengono mostrate più colonne e quindi maggiori informazioni:

UID          PID    PPID  C    SZ   RSS PSR STIME TTY          TIME CMD
root           1       0  0 44388 11208   1 08:14 ?        00:00:02 /lib/systemd/systemd splash --system --deserialize 17
root           2       0  0     0     0   1 08:14 ?        00:00:00 [kthreadd]
root           3       2  0     0     0   0 08:14 ?        00:00:00 [rcu_gp]
root           4       2  0     0     0   0 08:14 ?        00:00:00 [rcu_par_gp]
root           5       2  0     0     0   0 08:14 ?        00:00:00 [slub_flushwq]
root           6       2  0     0     0   0 08:14 ?        00:00:00 [netns]
root           8       2  0     0     0   0 08:14 ?        00:00:00 [kworker/0:0H-events_highpri]
root          10       2  0     0     0   0 08:14 ?        00:00:00 [mm_percpu_wq]
root          11       2  0     0     0   0 08:14 ?        00:00:00 [rcu_tasks_kthread]
root          12       2  0     0     0   0 08:14 ?        00:00:00 [rcu_tasks_rude_kthread]
root          13       2  0     0     0   0 08:14 ?        00:00:00 [rcu_tasks_trace_kthread]
root          14       2  0     0     0   0 08:14 ?        00:00:01 [ksoftirqd/0]
root          15       2  0     0     0   2 08:14 ?        00:00:17 [rcu_preempt]
root          16       2  0     0     0   0 08:14 ?        00:00:00 [migration/0]
root          18       2  0     0     0   0 08:14 ?        00:00:00 [cpuhp/0]
root          19       2  0     0     0   1 08:14 ?        00:00:00 [cpuhp/1]

Le colonne visualizzate ora sono:

  • UID: l'ID utente del proprietario del processo;
  • PID: l'ID del processo;
  • PPID: ID del processo genitore;
  • C: il numero di figli;
  • PSR: il processore (cpu) a cui è assegnato il processo;
  • STIME: ora di inizio. Il momento in cui è iniziato il processo;
  • TTY: il nome della shell a cui l'utente è connesso;
  • TIME: il tempo di elaborazione della CPU utilizzato dal processo;
  • CMD: il nome del comando che ha avviato il processo

Vedere processi di un particolare utente

Per vedere i processi di un particolare utente:

ps -u davide

    PID TTY          TIME CMD
   1400 ?        00:00:00 systemd
   1401 ?        00:00:00 (sd-pam)
   1417 ?        00:00:13 pipewire
   1418 ?        00:00:01 wireplumber
   1419 ?        00:00:15 pipewire-pulse
   1420 ?        00:00:12 dbus-daemon
   1430 ?        00:00:02 kwalletd5
   1431 ?        00:00:00 startplasma-x11
   1507 ?        00:00:00 ssh-agent
   1524 ?        00:01:03 ibus-daemon
   1527 ?        00:00:00 ibus-dconf
   1529 ?        00:00:10 ibus-ui-gtk3
   1530 ?        00:00:09 ibus-extension-
   1532 ?        00:00:00 ibus-x11
   1537 ?        00:00:00 ibus-portal
   1557 ?        00:00:00 at-spi-bus-laun
   1563 ?        00:00:01 dbus-daemon
   1573 ?        00:00:05 at-spi2-registr
   1582 ?        00:00:10 ibus-engine-sim
   1618 ?        00:00:00 plasma_session
   1622 ?        00:00:00 start_kdeinit
   1623 ?        00:00:00 kdeinit5
   1624 ?        00:00:02 klauncher
   1658 ?        00:08:31 kwin_x11
   1679 ?        00:00:05 kglobalaccel5
   1691 ?        00:00:00 dconf-service
   1694 ?        00:00:03 ksmserver

Ordinare i processi

Con l'opzione -o è possibile selezionare le colonne che si desidera includere nell'output del comando ps, mentre l'opzione --sort permette di ordinare l'output in base al parametro specificato:

ps -eo pid,pcpu,pmem,args --sort -pcpu,pmem | head -10

    PID %CPU %MEM COMMAND
  59079  9.0  0.3 vim processes.md
  59118  7.6  4.2 $HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0/jdk-11.0.12+7/bin/java -Xms64m -Xmx512m -classpath $HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0/etc:$HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0/lib/* -Dapp.name=ltex-ls -Dapp.pid=59118 -Dapp.repo=$HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0/lib -Dapp.home=$HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0 -Dbasedir=$HOME/.config/coc/extensions/node_modules/coc-ltex/lib/ltex-ls-15.2.0 org.bsplines.ltexls.LtexLanguageServerLauncher
  26789  4.6  4.0 /usr/lib/firefox-esr/firefox-esr
  59080  3.3  1.4 node --no-warnings $HOME/.vim/bundle/coc.nvim/build/index.js
    971  2.8  0.7 /usr/lib/xorg/Xorg -nolisten tcp -auth /var/run/sddm/{49eaf0ba-ce00-4efc-8197-fdf9e6e8c827} -background none -noreset -displayfd 17 -seat seat0 vt7
   1658  1.7  0.7 /usr/bin/kwin_x11
  26918  1.0  2.0 /usr/lib/firefox-esr/firefox-esr -contentproc -childID 1 -isForBrowser -prefsLen 34960 -prefMapSize 222095 -jsInitLen 277276 -parentBuildID 20230214011352 -appDir /usr/lib/firefox-esr/browser 26789 true tab
  32110  1.0  4.4 /usr/bin/telegram-desktop --
  58902  0.8  1.3 /usr/lib/firefox-esr/firefox-esr -contentproc -childID 170 -isForBrowser -prefsLen 41310 -prefMapSize 222095 -jsInitLen 277276 -parentBuildID 20230214011352 -appDir /usr/lib/firefox-esr/browser 26789 true tab

Ricercare un processo

Come il comando grep è utilizzato per trovare stringhe da file ed output, il comando pgrep fa lo stesso per i processi.

La sintassi è molto semplice

pgrep -i -u username process_name

dove -i attiva l'opzione case-insensitive.

Ottenere il numero di processi di un utente

Per conoscere il numero di processi utilizzati da un utente specifico, utilizzare l'opzione -c:

pgrep -cu davide

112

Ad esempio:

 > pgrep -u davide -l

1400 systemd
1401 (sd-pam)
1417 pipewire
1418 wireplumber
1419 pipewire-pulse
1420 dbus-daemon
1430 kwalletd5
1431 startplasma-x11

Per trovare quale comando ha avviato il processo in questione basta digitare

pgrep -u username -a


 > pgrep -u davide -a

1400 /lib/systemd/systemd --user
1401 (sd-pam)
1417 /usr/bin/pipewire
1418 /usr/bin/wireplumber
1419 /usr/bin/pipewire-pulse
1420 /usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only
1430 /usr/bin/kwalletd5 --pam-login 7 8
1431 /usr/bin/startplasma-x11

Elencare i processi per nome e PID

pgrep -u username -l

Uccidere un processo

Tramite PID

Se, per esempio, si volesse uccidere il processo 1492:

sudo kill -9 1492

Tramite il nome

sudo pkill -9 top

Uccidere processi multipli

sudo killall -9 top

Collegamenti