Définition d'un processus.
Un processus est un programme en cours d'exécution. Par exemple, chaque fois que l'on lance la commande ls, un processus est créé durant l'exécution de la commande.
Un processus est identifié par un numéro unique que l'on appelle le PID (Process IDentifiant).
Un processus dispose d'un processus père que l'on appelle le PPID (Parent PID).
La particularité d'un processus est de s'exécuter avec les droits accordés à l'utilisateur qui a lancé la commande. Ceci participe fortement à la sécurité du système. Ainsi, si un utilisateur contracte un programme malveillant (un virus par exemple), le processus sera soumis au droit d'accès de cet utilisateur, et ne pourra pas effectuer des opérations non autorisées (comme par exemple modifier le fichier de mots de passe).
Au démarrage de l'ordinateur, le système charge le noyau Linux qui se charge de l'initialisation du matériel et de la détection des périphériques. Ceci fait, il démarre ensuite le processus init qui a comme particularité d'être le premier processus et de toujours utiliser le PID 1. Ce processus démarre ensuite des processus noyaux (dont le nom est noté entre crochets), et les premiers processus systèmes.
Chaque processus a ainsi un père (sauf init), et peut être à son tour le père d'autres processus, etc.
La commande pstree permet de visualiser l'arbre des processus. L'option -p permet de visualiser les PID de chaque processus.
Exemple :
 $ pstree -p
 init(1)─┬─atd(2861)
 ├─avahi-daemon(2647)───avahi-daemon(2648)
 ├─cron(2873)
 ├─cupsd(2571)
 ├─dbus-daemon(2579)
 ├─dbus-daemon(3023)
 ├─dbus-launch(3022)
 ├─dcopserver(3054)
 ├─dhcdbd(2628)
 ├─dirmngr(3221)
 ├─events/0(4)
 ├─exim4(2739)
 ├─gconfd-2(3576)
 ├─gdm(2796)───gdm(2802)─┬─Xorg(2805)
 │ └─startkde(2971)─┬─kwrapper(3063)
 │ └─ssh-agent(3019)
 ├─getty(2902)
 ├─getty(2903)
 ├─getty(2904)
 ├─getty(2905)
 ├─getty(2906)
 ├─getty(2907)
 ├─hald(2587)───hald-runner(2588)─┬─hald-addon-keyb(2594)
 │ └─hald-addon-stor(2621)
 ├─hpiod(2464)
 ├─inetd(2756)
 ├─kaccess(3073)
 ├─kded(3058)
 ├─kdeinit(3051)─┬─artsd(3077)
 │ ├─firefox-bin(3572)─┬─{firefox-bin}(3573)
 │ │ ├─{firefox-bin}(3574)
 │ │ ├─{firefox-bin}(3581)
 │ │ ├─{firefox-bin}(3586)
 │ │ ├─{firefox-bin}(3587)
 │ │ └─{firefox-bin}(3588)
 │ ├─kio_file(3071)
 │ ├─klauncher(3056)
 │ ├─konsole(3308)───bash(3309)───pstree(4518)
 │ ├─konsole(3907)───bash(3908)───su(3925)───bash(3926)
 │ └─kwin(3066)
 ├─kdesktop(3068)
 ├─kdesud(3357)
 ├─khelper(5)
 ├─kicker(3070)
 ├─klipper(3085)
 ├─klogd(2446)
 ├─knotify(3082)
 ├─korgac(3086)
 ├─ksmserver(3065)
 ├─ksoftirqd/0(3)
 ├─kthread(6)─┬─aio/0(76)
 │ ├─ata/0(594)
 │ ├─ata_aux(595)
 │ ├─hda_codec(1575)
 │ ├─kblockd/0(9)
 │ ├─khubd(529)
 │ ├─kjournald(1012)
 │ ├─kjournald(1916)
 │ ├─kjournald(1918)
 │ ├─kjournald(1920)
 │ ├─kjournald(1922)
 │ ├─kmirrord(1874)
 │ ├─kpsmoused(1551)
 │ ├─kseriod(12)
 │ ├─kswapd0(75)
 │ ├─pdflush(73)
 │ ├─pdflush(74)
 │ ├─scsi_eh_0(653)
 │ └─scsi_eh_1(655)
 ├─migration/0(2)
 ├─portmap(2192)
 ├─python(2491)
 ├─rpc.statd(2810)
 ├─soffice(4472)───soffice.bin(4492)─┬─{soffice.bin}(4493)
 │ ├─{soffice.bin}(4494)
 │ ├─{soffice.bin}(4495)
 │ ├─{soffice.bin}(4496)
 │ └─{soffice.bin}(4497)
 ├─start_kdeinit(3050)
 ├─syslogd(2440)
 └─udevd(1192)
Dans cette arborescence, on constate que le processus init est bien le père de tous les processus. 
Afficher la liste des processus.
La commande ps permet d'afficher les processus. Utilisée sans option, la commande ps affiche les processus de l'utilisateur courant associé au terminal courant.
Pour connaître tous les processus, y compris ceux qui ne sont pas associés au terminal courant, on utilise les options aux (notation BSD) et -ef (notation Unix). Pour connaître la totalité des options, consulter la page de manuel de la commande ps (man ps).
Exemples :
 $ ps aux
 pixl@nitroglycerine:~$ ps aux
 USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
 root 1 0.0 0.0 1944 644 ? Ss 11:36 0:00 init [2]
 root 2 0.0 0.0 0 0 ? S 11:36 0:00 [migration/0]
 root 3 0.0 0.0 0 0 ? SN 11:36 0:00 [ksoftirqd/0]
 root 4 0.0 0.0 0 0 ? S< 11:36 0:00 [events/0]
 root 5 0.0 0.0 0 0 ? S< 11:36 0:00 [khelper]
 daemon 2192 0.0 0.0 1684 376 ? Ss 11:36 0:00 /sbin/portmap
 root 2440 0.0 0.0 1628 640 ? Ss 11:36 0:00 /sbin/syslogd
 root 2446 0.0 0.0 1576 376 ? Ss 11:36 0:00 /sbin/klogd -x
 root 2464 0.0 0.0 4884 916 ? Ss 11:36 0:00 /usr/sbin/hpiod
 $ ps -ef
 UID PID PPID C STIME TTY TIME CMD
 root 1 0 0 11:36 ? 00:00:00 init [2]
 root 2 1 0 11:36 ? 00:00:00 [migration/0]
 root 3 1 0 11:36 ? 00:00:00 [ksoftirqd/0]
 root 4 1 0 11:36 ? 00:00:00 [events/0]
 root 5 1 0 11:36 ? 00:00:00 [khelper]
 daemon 2192 1 0 11:36 ? 00:00:00 /sbin/portmap
 root 2440 1 0 11:36 ? 00:00:00 /sbin/syslogd
 root 2446 1 0 11:36 ? 00:00:00 /sbin/klogd -x
 root 2464 1 0 11:36 ? 00:00:00 /usr/sbin/hpiod
Au final, on obtient les mêmes résultats.
Les signaux.
Définition.
Les signaux offrent un mécanisme permettant d'envoyer un message à un processus en cours d'exécution. On se sert généralement des signaux pour terminer un processus, lui indiquer de relire sa configuration, etc.
Les différents signaux.
Pour connaître la liste des signaux, il suffit de consulter la page de manuel de signal (section 7) :
 $ man 7 signal
 Signal Valeur Action Commentaire
 SIGHUP 1 Term Déconnexion détectée sur le terminal
 de contrôle ou mort du processus de
 contrôle.
 SIGINT 2 Term Interruption depuis le clavier.
 SIGQUIT 3 Core Demande « Quitter » depuis le clavier.
 SIGILL 4 Core Instruction illégale.
 SIGABRT 6 Core Signal d’arrêt depuis abort(3).
 SIGFPE 8 Core Erreur mathématique virgule flottante.
 SIGKILL 9 Term Signal « KILL ».
 SIGSEGV 11 Core Référence mémoire invalide.
 SIGPIPE 13 Term Écriture dans un tube sans lecteur.
 SIGALRM 14 Term Temporisation alarm(2) écoulée.
 SIGTERM 15 Term Signal de fin.
 SIGUSR1 30,10,16 Term Signal utilisateur 1.
 SIGUSR2 31,12,17 Term Signal utilisateur 2.
 SIGCHLD 20,17,18 Ign Fils arrêté ou terminé.
 SIGCONT 19,18,25 Cont Continuer si arrêté.
 SIGSTOP 17,19,23 Stop Arrêt du processus.
 SIGTSTP 18,20,24 Stop Stop invoqué depuis tty.
 SIGTTIN 21,21,26 Stop Lecture sur tty en arrière-plan.
 SIGTTOU 22,22,27 Stop Écriture sur tty en arrière-plan.
Les signaux les plus connus sont les trois suivants :
Envoyer un signal à un processus.
kill.
La commande kill permet d'envoyer un signal au processus. Syntaxe :
 $ kill -"<numéro du signal ou nom du signal>" "<PID du processus>"
Exemples :
 $ kill -1 12345
 $ kill -SIGTERM 12345
Exemple :
 $ pidof cupsd
 2571
 $ kill -15 2571
ou directement :
 $ kill `pidof java`
killall.
La commande killall permet d'indiquer le nom du processus plutôt que son PID, et va envoyer le signal à tous les processus possédant ce nom. Exemple :
 $ xeyes & ; xeyes & ; xeyes &
 $ killall xeyes
Utilisé sans option, les commandes kill et killall envoient le signal n°15 (arrêt propre).
pkill.
Pour tuer un processus par son nom.
Par exemple pour killer une session bloquée :
Autres commandes affichant les processus.
La commande top permet d'afficher (entre autres) la liste des processus de manière dynamique (rafraîchit la liste toutes les 3 secondes).
Lorsque la commande top fonctionne, les lettres suivantes permettent de changer son fonctionnement :
Les processus légers.
Les Thread ID (TID ou SPID).
Les processus légers SPID connus aussi sous le nom de TID (Threads ID) sont les numéros des threads. Explication par l'exemple : 
Voir aussi : Processus léger sur Wikipédia
Limiter un processus.
CPULimit est un utilitaire qui permet de limiter la ressource CPU utilisée par un processus
 apt-get install cpulimit
La syntaxe est la suivante :
cpulimit --pid <pid> --limit <limit>
<pid> est le pid du processus cible, et <limit> la limitation effective en pourcentage (maximum 100% sur un simple cœur, 200 pour un double ...)
Exemple :
 cpulimit --pid 2960 --limit 55
Exemple avec le nom de processus (au lieu du pid) :
 cpulimit --exe bigloop --limit 40
Conserver un processus en activité.
Il est possible de laisser tourner un processus lancé depuis la console même sans être connecté. On utilise la fonction nohup qui permet d'ignorer le signal SIGHUP lors de la déconnexion.
 $ nohup application &
La sortie standard est automatiquement redirigée vers nohup.out dans le répertoire courant, sauf si une redirection est spécifiée.
 $ nohup application & > application.log