Domanda

Sto cercando di identificare quando un particolare processo è in esecuzione, sulla base delle sue argomentazioni, su Mac OS X. Ci possono essere diversi processi in esecuzione con lo stesso nome, ma solo uno avrà gli argomenti che sto cercando. I processi non sono di proprietà dello stesso utente che eseguirà il mio codice. Essi non hanno modificato la loro argv in alcun modo.

Gli spettacoli comando 'PS' esattamente le informazioni di cui ho bisogno. Ma sarei molto preferirei non dover deporre le uova 'ps' e analizzare la sua uscita.

Originariamente ho provato la soluzione da questa domanda , usando sysctl, ma si scopre che funziona solo per i processi che possiedi; vedi mia altra domanda per maggiori informazioni.

Così come ps ottenere argv informazioni per i processi di proprietà di altri utenti?

È stato utile?

Soluzione

In Mac OS X ps è setuid 0, che è come ottiene le informazioni per tutti i processi. È necessario eseguire come root per ottenere tali informazioni, quindi o è necessario essere setuid 0 o eseguire il programma di utilità con sudo.

Il modo migliore è probabilmente solo per ps uova e analizzare l'output, anche se non si ha realmente desidera;)

Altri suggerimenti

BSD ps (usato in Mac OS X) utilizza kvm_getargv() per ottenere gli argomenti della riga di comando per un processo.

Questa è la chiamata effettiva: fonte ps codice . Cerca kvm_getproc2.

OpenBSD man page per questa famiglia di funzioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top