Nuovi processi vengono creati con chiamate di sistema, ovvero fork()
, vfork()
e clone()
. In questi giorni, le funzioni C corrispondenti a queste chiamate sono implementate con una chiamata sottostante a clone()
(la chiamata di sistema effettiva, vista dal kernel), ma le altre due chiamate di sistema sono ancora lì e potrebbero essere invocate da qualsiasi processo con un semplice pezzo di assemblaggio.
Per tracciare tutti i processi utente, devi solo usare ptrace()
e intercettare queste chiamate, in modo da poterti collegare ai nuovi processi immediatamente dopo la loro creazione. Ecco come funziona strace
.