Originariamente inviato da simo_us
Da user space non puoi accedere alla memoria kernel space.
Perdona l'ignoranza. C'è modo di accedere alla memoria kernel space?

Originariamente inviato da simo_us
Esistono anche le funzioni per accedere al proc fylesystem. Ma parliamo sempre di kernel space. Una corretta implementazione di fopen, read, fread, write e fwrite o fprintf dovrebbe, (credo), essere sufficiente. :master:
Se guardi all'interno di /proc vedrai tante cartelle nominate con un numero. bene, quel numero é un pid.. Se navighi all'interno di quelle cartelle avrai accesso alle informazioni dei processi.
Sì, lo so... ci sono tutte le cartelle con i pid; probabilmente dovrei fare un controllo sui nomi delle cartelle, se il nome è un numero lo posso considerare una cartella di processo. Non credo esista altro modo. Mi chiedevo però, per l'appunto, se c'è qualche funzione che permette di navigare all'ìnterno del filesystem e di recuperare i nomi di file e cartelle in una directory. Ho quasi un vago ricordo come se esistesse qualcosa del genere e che forse l'ho pure usata, ma temo di confondermi con Java, mentre a me interessa il C/C++.

In ogni caso, ciò può essere utile per implementare una ps (e, per mia curiosità personale, mi può anche interessare, per cui mi piace mantenere vivo anche quest'altro spunto di discussione), ma per implementare ciò che intendevo io, ovvero un qualcosa che controlli tutti i processi creati in un dato intervallo, credo ci voglia qualcosa di più sofisticato. Penso che ci voglia qualche comando che faccia il monitoring di tutte le system call del sistema operativo e ti dica quando c'è una system call di creazione processo, ed ottenerne così il relativo pid restituito dalla system call. Credo che system call che creano processi siano solo la fork() e la clone(), non ho idea se ne esistano altre. Il comando strace purtroppo non credo sia sufficiente, perché può al più monitorare le system call richiamate da un particolare il processo, ma non penso che possa osservare tutte le system call richiamate dal sistema operativo. :master: