¿Cómo puedo obtener el PID del proceso de usuario que desencadenó la rutina file_operation.read
de mi módulo Kernel (es decir, qué proceso está leyendo /dev/mydev
)?Obteniendo el proceso de usuario pid al escribir el Kernel Linux Module
Respuesta
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
.
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
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.
- 1. ¿Cómo lee el archivo linux-kernel proc/pid?
- 2. ¿Cómo determina Linux el próximo PID?
- 3. Obteniendo el inodo de la ruta en Linux Kernel
- 4. ¿Qué usa ERESTARTSYS al escribir el controlador de Linux?
- 5. ¿Cómo detener el proceso 'ininterrumpible' en Linux?
- 6. Kernel Module: hrtimer_start "Símbolo desconocido en el módulo"
- 7. Popen obteniendo pid del proceso de nueva ejecución
- 8. Quiero contribuir con el kernel de Linux
- 9. Makefile para el módulo kernel de Linux?
- 10. linux: programmatically get parent pid de otro proceso?
- 11. Linux Kernel Invalidating TLB Entries
- 12. Del kernel al espacio de usuario (DMA)
- 13. linux kernel module linker warnings: "*** Advertencia: <function> [<module>] undefined!" - ¿Alguna forma de deshacerse de ellos?
- 14. pid del proceso actualmente en ejecución
- 15. Linux PID reciclaje
- 16. Cómo escribir datos en el proceso STDIN del proceso externo?
- 17. I2C escribir encuesta de confirmación en Linux Kernel
- 18. Determine pid de proceso terminado
- 19. Programación del kernel de Linux
- 20. ¿Cómo habilitar la depuración dinámica en el kernel de Linux?
- 21. No se puede escribir en la memoria kernel a través del módulo kernel de Linux (Ubuntu)
- 22. desarrollo del kernel de Linux
- 23. ¿Cómo obtener el nombre de usuario del proceso por PID en Mac OS?
- 24. ¿Dónde procesa el kernel de Linux y la limpieza de las conexiones TCP después del proceso?
- 25. ¿Cómo pasar del modo de usuario al modo kernel?
- 26. ¿Cómo obtener el PID de un proceso dando el nombre del proceso en Mac OS X?
- 27. Obtener el nombre del proceso de pid o manejar
- 28. Cómo obtener el PID de un proceso en una tubería
- 29. linux: ¿obteniendo umask de un proceso ya en ejecución?
- 30. obtener pid del proceso hijo
¿Qué es actual? read no recibe una corriente como argumento ... ssize_t (* read) (archivo struct *, char __user *, size_t, loff_t *); – 0x90
@ 0x90 Es una macro. – cnicutar
http://kernelnewbies.org/FAQ/current, ¿verdad? – 0x90