使用stracedebugging文件访问

我试图找出正在运行的程序试图(和失败)打开文件的完整path。 我明白, strace可以做到这一点,但我显然没有正确使用它。 正在运行的程序是一个服务,所以我没有看到一个简单的方法直接在strace下运行它。 我见过的例子看起来像

 $ sudo strace -p <process id> -e open,access 

是附加到正在运行的进程的正确咒语,但是当我运行这个时,我看到没有输出,即使有问题的程序logging其失败的尝试打开文件。 我甚至没有看到任何输出

 $ sudo strace -p 24249 Process 24249 attached - interrupt to quit futex(0x7f650fe159d0, FUTEX_WAIT, 24250, NULL 

就像futex因为某种原因被切断了一样? 或者是这种情况的正常输出?

无论如何,我做错了什么?

是否有可能对服务本身运行strace,即在手动启动服务时将其打开。

 strace -ffttTo /tmp/strace.out service <foo> start 

并生成pastebin文件。

编辑:由于它是无法打开文件,你可以search关键字ENOENT或grepstringNo such file or directory

EDIT2:我再次看到输出并检查了futex的手册页。 所以,似乎访问内存位置0x7f650fe159d0的东西是持有一个锁,也许是一个共享锁,而不是释放它。 pid 24250也是一个参数。 你能检查一下这个pid在做什么吗?

另外,你可以检查与24249相关联的内核函数。 可以在ps -eo wchan <pid>命令中使用wchan选项显示。 我不记得详细的wchan列表,但是明天我会为你准备的。 (这里晚了)。