GNU/Linux >> Linux の 問題 >  >> Linux

プロセスを聞く方法はありますか?

1 つの -- 確かに手荒な -- アプローチは、 strace を使用することです。 :

$ strace -e trace=none -e signal=none -p 12345

PID 12345 でプロセスを監視し、システム コールをインターセプトしません (最初の -e ) 信号なし (2 番目の -e )。プロセスが通常の方法で終了すると、終了値が出力されます。

プロセスがシグナルによって終了した場合、strace はサイレントに終了します (上記のオプションで実行した場合)。たとえば、次のように使用できます。 -e signal=kill この動作を変更します。ただし、-e signal=all に注意してください。 (または、同等に、-e signal を省略します) オプション) は、プログラムがシグナルを受信して​​処理する場合、大量の出力を生成する可能性があります。


<オール>
  • 「通知」の実行の連鎖

    $ process; notify $? &
    

    プロセスが予期しない方法で終了する場合は、notify に注意してください。 実行されません

  • トラップの設定

    プロセスは異なる意味の信号によって通知され、適切に反応できます

    #!/bin/bash
    
    process
    
    function finish {
        notify $?
    }
    trap finish EXIT
    
  • どの通知を念頭に置いているのか明確ではありません。本質的には、もちろん「ベル」を鳴らすものなら何でもかまいません。多くのための1つ。 notify-send libnotify から

    $ process; notify-send "process finished with status $?" &
    

    Bash がこれを行います。プロセスが終了すると、制御を戻して通知し、終了ステータスを特別な変数 $? に保存します。 .おおよそ次のようになります:

    someprocess
    echo $?
    

    詳細については、特別なパラメーターに関する bash のマニュアルを参照してください。

    でも、待っている間に他の仕事をしたいと思っていると思います。 bash では、次のようにできます:

    someprocess &
    otherwork
    wait %+
    echo $?
    

    someprocess & バックグラウンドでプロセスを開始します。つまり、制御がすぐに戻り、他の作業を行うことができます。バックグラウンドで開始されたプロセスは、bash ではジョブと呼ばれます。 wait 指定されたジョブが終了するのを待ってから、そのジョブの終了ステータスを返します。ジョブは %n によって参照されます . %+ 最後に開始されたジョブを参照します。詳細については、ジョブ制御に関する bash のマニュアルを参照してください。

    本当に PID が必要な場合は、次のようにすることもできます:

    someprocess &
    PID=$!
    otherwork
    wait $PID
    echo $?
    

    $! 最後に開始されたバックグラウンド プロセスの PID を含む特別な変数です。


    Linux
    1. プロセス置換を実現するためのポータブル(posix)の方法?

    2. Linux で壊れた scp (セキュア コピー) コマンド プロセスを続行する方法はありますか?

    3. NETCDF ファイルをトリミングする方法はありますか?

    1. ファイルの中断された scp を再開する方法はありますか?

    2. 不良ブロックを再起動する方法はありますか?

    3. SELinuxを学ぶ最良の方法は何ですか?

    1. Unix で別のプロセスの環境変数を変更する方法はありますか?

    2. 列ごとに「ユニーク」にする方法はありますか?

    3. CPU の CPUID 情報をダンプする方法はありますか?