2012-08-11 1 views

risposta

15

Quando la funzione di lettura è in esecuzione, lo fa nel contesto del processo che ha generato la chiamata di sistema. Pertanto, è possibile utilizzare current, ad esempio current->pid.

+0

cos'è corrente? read non ottiene una corrente come argomento ... ssize_t (* read) (struct file *, char __user *, size_t, loff_t *); – 0x90

+2

@ 0x90 È una macro. – cnicutar

+0

http://kernelnewbies.org/FAQ/corrente, giusto? – 0x90

7

In questi giorni, abbiamo alcune funzioni di supporto definite in sched.h. Nel caso di pid, è possibile utilizzare:

pid = task_pid_nr(current); 

per ottenere il pid dell'attività corrente.

questo è il commento preso da include/linux/sched.h a partire dalla v3.8.

gli aiutanti per ottenere diversi PID del compito in quanto sono visti da vari namespace

  • task_xid_nr(): id globale, vale a dire l'id visto dallo spazio dei nomi init;
  • task_xid_vnr(): ID virtuale, ovvero l'ID visto dallo spazio dei nomi pid di corrente.
  • task_xid_nr_ns(): id visto dall'ns specificato;
  • set_task_vxid(): assegna un ID virtuale a un'attività;

vedi anche pid_nr() etc in include/linux/pid.h

2

su un kernel 2.6.39 braccio di compilazione, se current->pid non funziona allora può essere fatto da:

pid_nr(get_task_pid(current, PIDTYPE_PID)) 

Il PIDTYPE_PID può essere sostituito da PIDTYPE_PGID o PIDTYPE_SID. La fonte di intestazione è a include/linux/pid.h come indicato da Yasushi.

Quale degli approcci funziona dipende da quali file di intestazione viene utilizzato il codice.