调用 'mkfifo' 时 C++ 程序挂起 (Lustre FS)
C++ program is hanging when invoking 'mkfifo' (Lustre FS)
我正在 运行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
程序生成的 shell 脚本缺少 shebang 声明:这会阻止 fifo 流工作。
我正在 运行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
程序生成的 shell 脚本缺少 shebang 声明:这会阻止 fifo 流工作。