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