2012-08-11 16 views

Respuesta

15

Cuando su función de lectura se está ejecutando, lo hace en el contexto del proceso que emitió la llamada al sistema. Por lo tanto, debe poder utilizar current, es decir, current->pid.

+0

¿Qué es actual? read no recibe una corriente como argumento ... ssize_t (* read) (archivo struct *, char __user *, size_t, loff_t *); – 0x90

+2

@ 0x90 Es una macro. – cnicutar

+0

http://kernelnewbies.org/FAQ/current, ¿verdad? – 0x90

7

En estos días, tenemos algunas funciones auxiliares definidas en sched.h. En el caso de pid, puede usar:

pid = task_pid_nr(current); 

para obtener el pid de la tarea actual.

aquí está el comentario tomado de include/linux/sched.h a partir de v3.8.

los ayudantes para obtener diferentes PIDs de la tarea ya que son vistos de varios espacios de nombres

  • task_xid_nr(): id global, es decir, la identificación se ve desde el espacio de nombres de inicio;
  • task_xid_vnr(): id virtual, es decir, el id visto desde el espacio de nombres pid de current.
  • task_xid_nr_ns(): id visto desde el ns especificado;
  • set_task_vxid(): asigna un ID virtual a una tarea;

ver también pid_nr() etc en include/linux/pid.h

2

en un kernel 2.6.39 brazo acumulación, si current->pid no funciona, entonces puede ser hecho por:

pid_nr(get_task_pid(current, PIDTYPE_PID)) 

El PIDTYPE_PID se puede sustituir por PIDTYPE_PGID o PIDTYPE_SID. El origen del encabezado está en include/linux/pid.h, como señaló Yasushi.

Cuál de los enfoques funciona depende de qué archivos de encabezado utiliza el código.

Cuestiones relacionadas