Benutzerprozess-PID beim Schreiben des Linux-Kernel-Moduls erhalten

Lesezeit: 1 Minute

Wie kann ich die PID des Benutzerprozesses abrufen, der meine Kernel-Module ausgelöst hat? file_operation.read Routine (d. h. welcher Prozess liest /dev/mydev) ?

Wenn Ihre Lesefunktion ausgeführt wird, geschieht dies im Kontext des Prozesses, der den Systemaufruf ausgegeben hat. Sie sollten daher pe in der Lage sein, zu verwenden currentdh current->pid.

  • was ist aktuell? read bekommt keinen Strom als Argument… ssize_t(*read) (struct file *, char __user *, size_t, loff_t *);

    – 0x90

    11. August 2012 um 15:30 Uhr


Heutzutage haben wir einige Hilfsfunktionen in sched.h definiert. Im Fall von pid können Sie Folgendes verwenden:

pid = task_pid_nr(current);

um die PID der aktuellen Aufgabe zu erhalten.

hier ist der kommentar entnommen include/linux/sched.h ab v3.8.

die Helfer, um die verschiedenen PIDs der Aufgabe zu erhalten, wie sie von verschiedenen Namensräumen gesehen werden

  • task_xid_nr() : globale ID, dh die ID, die aus dem Init-Namensraum gesehen wird;
  • task_xid_vnr() : Virtuelle ID, dh die ID, die aus dem aktuellen PID-Namensraum gesehen wird.
  • task_xid_nr_ns() : ID gesehen von den angegebenen ns;
  • set_task_vxid() : weist einer Aufgabe eine virtuelle ID zu;

siehe auch pid_nr() etc in include/linux/pid.h

Auf einem Arm-Build von Kernel 2.6.39, wenn current->pid nicht funktioniert, dann kann es getan werden durch:

    pid_nr(get_task_pid(current, PIDTYPE_PID))

Das PIDTYPE_PID kann ersetzt werden durch PIDTYPE_PGID oder PIDTYPE_SID. Die Header-Quelle ist bei include/linux/pid.h wie Yasushi betonte.

Welcher der Ansätze funktioniert, hängt davon ab, welche Header-Dateien der Code verwendet.

1217310cookie-checkBenutzerprozess-PID beim Schreiben des Linux-Kernel-Moduls erhalten

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy