# Monitorare i processi di sistema Il comando `ps` visualizza un elenco dei processi avviati dall'utente che ha eseguito il comando. ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```bash 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: ```bash 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 ```bash 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`: ```bash pgrep -cu davide 112 ``` Ad esempio: ```bash > 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 ```bash 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 ```bash pgrep -u username -l ``` ## Uccidere un processo ### Tramite PID Se, per esempio, si volesse uccidere il processo 1492: ```bash sudo kill -9 1492 ``` ### Tramite il nome ```bash sudo pkill -9 top ``` ### Uccidere processi multipli ```bash sudo killall -9 top ``` ## Collegamenti - [https://www.howtogeek.com/448271/how-to-use-the-ps-command-to-monitor-linux-processes/](https://www.howtogeek.com/448271/how-to-use-the-ps-command-to-monitor-linux-processes/) - [https://www.howtogeek.com/413213/how-to-kill-processes-from-the-linux-terminal/](https://www.howtogeek.com/413213/how-to-kill-processes-from-the-linux-terminal/) - [https://linuxhandbook.com/pgrep/](https://linuxhandbook.com/pgrep/)