実行中のプロセスの出力リダイレクト部分を取得する

実行中のプロセスの出力リダイレクト部分を取得する

작업을 실행할 때 출력을 리디렉션할 출력 파일을 잊어버릴 때가 있습니다. 출력 리디렉션 부분을 포함하여 작업을 실행할 때 사용되는 전체 명령을 얻으려면 어떻게 해야 합니까?

예를 들어, 내가 달릴 때

nohup python3 -c $'from time import sleep;\nfor i in range(100): print(i); sleep(1)' > .test.txt &

무언가를 인쇄 .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システムで実行されているプロセスにコマンドライン引数を渡す方法は?しかし、私のコマンドは切り捨てられたようではありません。

操作が完了したときにコマンドを実行するシェルがまだ開いている場合は、フルパスが表示されます。

[1]+  Done                    nohup python3 -c 'from time import sleep;
for i in range(100): print(i); sleep(1)' > .test.txt

この情報は、ジョブを実行しているシェルにのみ保存されますか?

編集する:history@muru結局私の注文が行われたことに気づきました。ありがとうございます。

答え1

実行中のプロセスのpidがある場合は、ls -l /proc/${pid}/fdstdout(fd 1)とstderr(fd 2)が書き込まれる場所が表示されます。

答え2

単一の「>」がファイルを上書きします。ファイルの末尾に「>>」を追加してみてください。

[admin@srv1 ~]$ for x in $(seq 1 100); do echo $x >> test.txt; done
[admin@srv1 ~]$ head -n 25 test.txt
1
2
...                                                                                                                                                                                                    

関連情報