在我的C程序中,运行在Linux上,它使用system()创建子进程,我注意到当我将标准输出重定向到管道或文件时,子进程的输出被发送到缓冲I/O函数(如printf() )的输出之前。当stdout被留给终端时,输出将按照预期的顺序进行。我将程序简化为以下示例:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf("1. output from printf()\n");
system("echo '2. output from a command
我正在寻找一种方法来监视由Linux上的程序写入的文件。我在tail -F中找到了命令,并推荐使用less +FG。我通过在一个终端上运行tail -F file和一个简单的python脚本来测试它:
import time
for i in range(20):
print i
time.sleep(0.5)
在另一个。我将输出重定向到文件:
python script.py >> file
我预计tail会跟踪文件内容并在固定的时间间隔内更新显示,相反,它只显示命令终止后写入文件的内容。
同样的情况发生在less +FG上,如果我观察cat的输出,也会发生同样的情况。
有时,我运行作业时,会忘记将输出重定向到哪个输出文件。如何获得运行作业的完整命令,包括输出重定向部分?
例如,当我跑
nohup python3 -c 它应该打印一些东西到.test.txt,运行100秒钟,然后运行ps -fp <PID>或检查/proc/<PID>/cmdline,我只得到python3 -c from time import sleep; for i in range(100): print(i); sleep(1)我已经在如何将命令行传递到unix/linux系统上正在运行的进程?上尝试过一些解决方案,但我不认为我的命令被截断了。我注意到当作业完
以下是我的问题的代码片段:
Process process = Runtime.getRuntime().exec(command);
if (process.waitFor() != 0)
throw new Exception("error");
reader =
new BufferedReader(new InputStreamReader(process.getInputStream()));
正在运行的进程正在产生巨大的输出。如果我将输出重定向到一个文件,则过程终止的速度比在屏幕上打印输出(标准输出)更快。由于磁盘的