C++程序在调用'mkfifo'时挂起(Lustre FS)

C++ program is hanging when invoking 'mkfifo' (Lustre FS)

本文关键字:Lustre FS 挂起 程序 C++ mkfifo 调用      更新时间:2023-10-16

我正在运行C++程序STAR(https://github.com/alexdobin/STAR(,这在我的研究领域很常见。

当我在服务器上运行此软件时,一切正常。

当我在另一台服务器上运行相同的软件(FS=lustre(时,程序冻结

我的命令行是:

/path/to/star/STAR-2.7.1a/source/STAR --genomeDir /path/to/reference/ 
        --readFilesIn jeter1.fastq.gz jeter1.fastq.gz 
        --readFilesCommand gunzip -c  --outReadsUnmapped None --outSAMattributes All  |
        head -n 1000

我使用 strace 来查看发生了什么:

   (...)
   rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
   --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=54748, si_uid=24382, si_status=0, si_utime=0, si_stime=0} ---
   getxattr("./_STARtmp//readFilesIn.info", "security.shook_state", 0x7ffd5a10b6c0, 1024) = -1 ENODATA (No data available)
   open("./_STARtmp//readFilesIn.info", O_RDONLY) = 7
   read(7, "-rw-r-----. 1 lindenbp fg0073 10"..., 8191) = 66
   read(7, "", 8191)                       = 0
   close(7)                                = 0
   write(6, "exec > "./_STARtmp/tmp.fifo.read"..., 82) = 82
   lseek(6, 0, SEEK_SET)                   = 0
   read(6, "exec > "./_STARtmp/tmp.fifo.read"..., 8191) = 82
   read(6, "", 8191)                       = 0
   write(3, "-rw-r-----. 1 lindenbp fg0073 10"..., 172) = 172
   close(6)                                = 0
   chmod("./_STARtmp//readsCommand_read1", 0700) = 0
   vfork()                                 = 54750
   --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=54750, si_uid=24382, si_status=0, si_utime=0, si_stime=0} ---
   getxattr("./_STARtmp/tmp.fifo.read1", "security.shook_state", 0x7ffd5a10b6c0, 1024) = -1 ENODATA (No data available)
   open("./_STARtmp/tmp.fifo.read1", O_RDONLY ######### <= FREEZES HERE
   (...)

所以我认为它冻结在这里的某个地方(?(:https://github.com/alexdobin/STAR/blob/bb207df0cb62560c9194247a0480182ccbe1dca5/source/Parameters_openReadsFiles.cpp#L38 当软件创建另一个进程来gunzip -c gzip 输入文件时。

我还尝试使用将 tmp 目录指定为"/tmp"的选项,但我得到了相同的结果。

什么可以解释这种行为,有没有办法解决它?

谢谢

我从作者那里得到了答案 https://github.com/alexdobin/STAR/issues/687

该程序生成了一个缺少 shebang delcaration 的 shell 脚本:这阻止了 fifo 流的工作。