我有一个可执行的二进制文件(它是一个设备驱动程序)。它运行并立即退出并返回成功的 0 代码。在一台计算机上,它创建了我可以使用 pgrep 看到的所有重要子进程,但遗憾的是在我的另一台计算机上却没有。运行它的输出strace
结束:
clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2851597310) = 32167
exit_group(0) = ?
+++ exited with 0 +++
但在该计算机上找不到进程(在本例中为 32167)。
我不知道如何解决出了什么问题。孩子sudo execsnoop -x
跑步时什么也不会出现。源代码不可用。 (不是主要目标,但如果它不克隆而是在前台运行所有内容,那就太好了。)如果有帮助的话,就是这个文件:https://github.com/elmadjian/tobii_4C_for_linux/blob/main/tobii_usb_service/usr/local/sbin/tobiiusbserviced
编辑:输出结束strace -f command
:
23747 clone(child_stack=NULL, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f789577f310) = 23748
23747 exit_group(0) = ?
23748 umask(000) = 022
23748 setsid( <unfinished ...>
23747 +++ exited with 0 +++
23748 <... setsid resumed>) = 23748
23748 brk(NULL) = 0x21bd000
23748 brk(0x21de000) = 0x21de000
23748 openat(AT_FDCWD, "/var/run/tobiiusb/tobiiusbservice.pid", O_WRONLY|O_CREAT|O_TRUNC, 0666) = -1 ENOENT (No such file or directory)
23748 openat(AT_FDCWD, "/etc/localtime", O_RDONLY|O_CLOEXEC) = 3
23748 fstat(3, {st_mode=S_IFREG|0644, st_size=3648, ...}) = 0
23748 fstat(3, {st_mode=S_IFREG|0644, st_size=3648, ...}) = 0
23748 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 3648
23748 lseek(3, -2321, SEEK_CUR) = 1327
23748 read(3, "TZif2\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\7\0\0\0\7\0\0\0\0"..., 4096) = 2321
23748 close(3) = 0
23748 socket(AF_UNIX, SOCK_DGRAM|SOCK_CLOEXEC, 0) = 3
23748 connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = -1 ENOENT (No such file or directory)
23748 close(3) = 0
23748 exit_group(1) = ?
23748 +++ exited with 1 +++
答案1
connect(3, {sa_family=AF_UNIX, sun_path="/dev/log"}, 110) = -1 ENOENT (No such file or directory)
它想要写入系统日志,但它丢失了。您的系统有问题,该文件/dev/log
通常应该存在。