#define _GNU_SOURCE #include #include #include #include #include #include #include #include #ifndef SYS_translate_pid #ifdef __x86_64__ #define SYS_translate_pid 333 #endif #endif pid_t translate_pid(pid_t pid, int source, int target) { return syscall(SYS_translate_pid, pid, source, target); } int main(int argc, char **argv) { int pid, source, target; char buf[64]; if (argc != 4) errx(1, "usage: %s ", argv[0]); pid = atoi(argv[1]); source = atoi(argv[2]); target = atoi(argv[3]); if (source >= 0) { sprintf(buf, "/proc/%d/ns/pid", source); source = open(buf, O_RDONLY); if (source < 0) err(2, "source %s", buf); } if (target >= 0) { sprintf(buf, "/proc/%d/ns/pid", target); target = open(buf, O_RDONLY); if (target < 0) err(2, "target %s", buf); } pid = translate_pid(pid, source, target); if (pid < 0) err(2, "translate"); printf("%d\n", pid); return 0; }