如何获取等待信号量的 PID

如何获取等待信号量的 PID

如果我跟踪一个卡住的进程并看到以下形式的输出:

[gaius@redhat64 bin]$ strace -p 18185
Process 18185 attached - interrupt to quit
[ Process PID=18185 runs in 32 bit mode. ]
semop(458760, 0xffa00af0, 1

我如何找出最后增加信号量的 PID/我正在等待的 PID?我知道其中的lpid列,ipcs -p但它仅适用于共享内存段。

我的操作系统是 x86_64 上的 RHEL 5.4 (Tikanga)。谢谢!

答案1

快速而肮脏:

#include <sys/sem.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
    int pid;
    if (argc != 2) return 1;
    pid = semctl(atoi(argv[1]), 0, GETPID);
    printf("%d\n", pid);
    return 0;
}

(我在这里猜测。)

相关内容