【问题标题】:How to find the process id of the process that issued a system call in Linux?如何在 Linux 中找到发出系统调用的进程的进程 ID?
【发布时间】:2014-10-26 20:30:16
【问题描述】:

我在 Linux 内核中添加了一个自定义系统调用。现在我想找出发出该系统调用的进程的 ID。 如果我在系统调用中使用current指针,我会得到当前运行进程的信息。它可能不是发出系统调用的实际进程,尤其是在多进程环境中。 例如,在用户空间程序中,我有代码。

int pid = fork();
if(pid < 0) {
    <statements>;
} else if(pid == 0) {
    mysystemcall();
}

这只是一个插图。现在我们不知道父子进程的执行顺序。在系统调用中,current 指针可能未指向发出该系统调用的父进程的 task_struct。 那么我怎样才能找到那个过程

【问题讨论】:

  • current 始终是发出系统调用的进程。见here

标签: linux linux-kernel system-calls


【解决方案1】:

current 总是指向调用自定义系统调用的进程的 task_struct,因此读取并返回 current-&gt;tgid,因为它返回调用系统调用的进程的 pid。请注意,pid 是进程 ID,tgid 是线程组 ID,因此对于由 fork() 调用的重量级进程,pid == tgid。

【讨论】:

    猜你喜欢
    • 2020-05-19
    • 1970-01-01
    • 2012-03-17
    • 2014-05-17
    • 2013-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多