我现在正在实现在fork之后在子进程中运行另一个程序。
export type Wrapped<T> = {
[P in keyof T]: T[P];
} & {
[symbol in keyof T]?: T[symbol]; // doesn't work
} & { _state: number }
如上所述,我正在测试运行只是简单的“ Hello world”的C / Python / Java程序。
export type Wrapped<T> = {
[P in keyof T]: T[P];
} & { _state: number } & {
[Symbol.toPrimitive](hint: "string"): string;
[Symbol.toPrimitive](hint: "default"): string;
[Symbol.toPrimitive](hint: "number"): number;
}
我允许使用 seccomp 进行一些白名单系统调用。
Python和C程序运行,其输出重定向到文件。
对于Java,子进程正常终止,但是如果加载 seccomp ,输出将消失。否则,我会看到“ Hello World”消息。
谢谢。
答案 0 :(得分:0)
我自己回答。
我试图在JVM上运行Java程序。它没有向父母发送正确的信号,所以看起来一切都很好。
我的问题与I / O问题,缓冲的I / O,刷新或文件描述符无关。
我通过逐行删除系统调用来测试ALLOW规则。
以下是JVM的最小系统调用:
SCMP_SYS(access),
SCMP_SYS(arch_prctl),
SCMP_SYS(brk),
SCMP_SYS(clock_getres),
SCMP_SYS(clone),
SCMP_SYS(close),
SCMP_SYS(connect),
SCMP_SYS(execve),
SCMP_SYS(exit_group),
SCMP_SYS(fchdir),
SCMP_SYS(fcntl),
SCMP_SYS(fstat),
SCMP_SYS(ftruncate),
SCMP_SYS(futex),
SCMP_SYS(getcwd),
SCMP_SYS(getdents),
SCMP_SYS(geteuid),
SCMP_SYS(getpid),
SCMP_SYS(gettid),
SCMP_SYS(getuid),
SCMP_SYS(kexec_load),
SCMP_SYS(kill),
SCMP_SYS(lseek),
SCMP_SYS(lstat),
SCMP_SYS(mkdir),
SCMP_SYS(mmap),
SCMP_SYS(mprotect),
SCMP_SYS(munmap),
SCMP_SYS(openat),
SCMP_SYS(prctl),
SCMP_SYS(pread64),
SCMP_SYS(prlimit64),
SCMP_SYS(pselect6),
SCMP_SYS(read),
SCMP_SYS(readlink),
SCMP_SYS(rt_sigaction),
SCMP_SYS(rt_sigprocmask),
SCMP_SYS(rt_sigreturn),
SCMP_SYS(sched_getaffinity),
SCMP_SYS(sched_yield),
SCMP_SYS(set_robust_list),
SCMP_SYS(set_tid_address),
SCMP_SYS(socket),
SCMP_SYS(stat),
SCMP_SYS(sysinfo),
SCMP_SYS(uname),
SCMP_SYS(unlink),
SCMP_SYS(write)