起初我没有得到它,但您的系统似乎决定将程序置于暂停(Stopped
状态)。 jobs
显示在当前终端会话中停止或运行的所有作业。 bg
/fg
可用于重新启动停止的作业,因此您可以检查是否导致文件被写入。进一步探究原因的另一个想法是运行/usr/bin/nohup strace ./a.out 1>stdout.txt 2>stderr.txt
。应该将strace
所有系统调用转储到stderr.txt
-- 这样您就可以看到它停止的原因。
此类问题的常见原因似乎是程序需要一些输入,并且由于 (with nohup
) 没有终端来提供它,系统会停止您的程序。我的第一个建议是尝试以下方法以提供一些自动生成的输入:
/usr/bin/nohup ./a.out </dev/zero
在我的系统上,它会自动运行它:
/usr/bin/nohup ./a.out </dev/null
我不知道为什么您的系统不会自动提供空输入,我也不知道您的程序为什么会等待输入。您最初的尝试对我来说效果很好(我无法重现您的问题)。
当我运行nohup ./a.out
(或nohup ./a.out &
)时,我收到以下消息,表示自动输入抑制:
nohup: ignoring input and appending output to `nohup.out'
所以另一条调查线是:你为什么看不到这条消息?
另一条攻击线,因为您的系统似乎不喜欢这样nohup
,所以将程序作为后台任务&
重新启动,如下所示:Stopped
/usr/bin/nohup ./a.out & bg
显然,nohup
是用来和 一起使用的&
,所以你的问题有点奇怪。