0

大学のマシンで Python プログラムを実行していますが、予想以上に時間がかかることに気付きました。コードの 1 回のループで出力が出力されます。この出力をファイルに保存し、システムからログアウトする必要があるため、現在実行中のプログラムをバックグラウンドで送信したいと考えています。

これ (すでに実行中のプロセスを nohup の下に置くにはどうすればよいですか? ) は、バックグラウンドに送信する方法を説明しています。たとえば、次を使用して、毎秒画面に表示されている出力を保存する方法はありますかtee

4

2 に答える 2

2

試したことはありませんが、この邪悪なハックはうまくいくかもしれません

  1. プログラムが使用しているファイル記述子を見つけます。

    ls -l /proc/<your-pid>/fd
    
  2. デバッガーをプロセスにアタッチします (実行可能ファイルは次のようなものです/usr/bin/python)。

    gdb --pid=<your-pid> <executable>
    
  3. 必要な新しいファイルを開きます ( と の数値を調べる必要がある場合がありますO_CREAT) O_WRONLY

    (gdb) set $newfd = open("myfile", O_CREAT | O_WRONLY)
    
  4. 手順 1 で見つけた古いファイル記述子を新しいものに置き換えます。

    (gdb) call dup2(<old-fd>, $newfd)
    (gdb) call close($newfd)
    
  5. プログラムを再度実行するように設定し、デバッガーを切断します

    (gdb) detach
    (gdb) quit
    

これは、関数opendup2関数がプログラムに存在する場合にのみ機能します。

警告: これによりプログラムがクラッシュする危険性があります!

于 2013-11-06T14:39:28.450 に答える