gpt4 book ai didi

linux - 如何检查进程是否已填充 STDOUT 或 STDERR 缓冲区

转载 作者:太空宇宙 更新时间:2023-11-04 09:04:25 24 4
gpt4 key购买 nike

给定 Linux 机器上的一个进程似乎被卡住了,我如何判断它是否由于 STDOUT 或 STDERR 缓冲区已满而被卡住?

在我的特殊情况下,我有一个进程没有执行任何 CPU 事件,但在我预计它会在几秒钟内退出时仍在运行。我怀疑进程已经填满了 STDOUT 或 STDERR 的缓冲区,而应该从缓冲区读取的进程由于某种原因停止了读取。

有什么方法可以证实我的怀疑吗?

最佳答案

附加 gdb 并运行回溯几乎证实了我的理论......

$ gdb /opt/our_process pid
...blah blah blah...
(gdb) bt
#0 0x0000003f27adae60 in __write_nocancel () from /lib64/libc.so.6
#1 0x0000003f27a71583 in _IO_new_file_write () from /lib64/libc.so.6
#2 0x0000003f27a7144a in _IO_new_file_xsputn () from /lib64/libc.so.6
#3 0x0000003f27a49531 in buffered_vfprintf () from /lib64/libc.so.6
#4 0x0000003f27a4449e in vfprintf () from /lib64/libc.so.6
#5 0x0000003f27a4f03a in printf () from /lib64/libc.so.6
...out process's stack...

并且 strace 为 shelter suggested似乎也可以解决问题...

$ strace -p 27689
Process 27689 attached - interrupt to quit
write(1, "some_text"..., 293

关于linux - 如何检查进程是否已填充 STDOUT 或 STDERR 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14432169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com