Как получить TPGID процесса из модуля ядра? (РЕЖИМ ЯДРА) - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу получить TPGID (поле 8 stat) процесса в модуле ядра, не обращаясь к файлу / proc / pid / stat, используя функции ядра.TPGID: идентификатор группы переднего плана процесса управляющего терминала процесса.

Это для Linux версии 5.0.5.Я пытался получить доступ к различным полям в task_struct и tty_struct каждого процесса, но результаты не совпадают с результатами из ps ax -O tpgid.

ps ax -O tpgid

Вывод

  PID TPGID S TTY          TIME COMMAND
 5226    -1 S ?        00:00:00 urxvt
 5227  5228 S pts/5    00:00:00 zsh
 5228  5228 R pts/5    00:00:00 ps ax -O tpgid
21160    -1 S ?        00:00:01 urxvt
21161   712 S pts/0    00:00:00 zsh
23132    -1 S ?        00:00:00 urxvt
23133 23133 S pts/3    00:00:00 zsh
27134    -1 S ?        00:00:00 urxvt
27135 27135 S pts/2    00:00:00 zsh
29921    -1 S ?        00:00:01 urxvt
29922  3185 S pts/4    00:00:00 zsh

Что япробовал в модуле

static inline struct tty_struct *get_tty(struct task_struct *task)
{
    struct tty_struct   *tty;
    unsigned long       flags;

    spin_lock_irqsave(&task->sighand->siglock, flags);
    tty = tty_kref_get(task->signal->tty);
    spin_unlock_irqrestore(&task->sighand->siglock, flags);

    return tty;
}

tty = get_tty(task);

if (tty != NULL) {
        task2 = pid_task(tty->pgrp, PIDTYPE_PGID);
        tpgid = pid_vnr(task_pgrp(task2));
}

dmesg вывод из модуля

[12790.690217] 23133 (zsh) S session_id:23133 pgrp:23133 tpgid:23133
[12790.690221] 27134 (urxvt) S session_id:3421 pgrp:3421 tpgid:-1
[12790.690230] 27135 (zsh) S session_id:27135 pgrp:27135 tpgid:27135
[12790.690233] 29921 (urxvt) S session_id:3421 pgrp:3421 tpgid:-1
[12790.690242] 29922 (zsh) S session_id:29922 pgrp:29922 tpgid:3185
[12790.690251] 712 (vim) S session_id:21161 pgrp:712 tpgid:712
[12790.690255] 1178 (kworker/u16:1) I session_id:0 pgrp:0 tpgid:-1
[12790.690258] 3013 (kworker/u16:2) I session_id:0 pgrp:0 tpgid:-1
[12790.690267] 3185 (man) S session_id:29922 pgrp:3185 tpgid:3185
[12790.690276] 3193 (man) S session_id:29922 pgrp:3185 tpgid:3185
...