3

Linux CentOS で次の C コードを実行して、プロセスを作成しました。

#include <stdio.h>
#include <unistd.h>

int main ()
{
        int i = 0;

        while ( 1 )
        {
              printf ( "\nhello %d\n", i ++ );
              sleep ( 2 );
        }
}

hello_count にコンパイルしました。./hello_countターミナルウィンドウで行うと、出力は次のようになります。

hello 0
hello 1
hello 2
...

別の端末ウィンドウでコマンドを入力すると

ps -e

プロセス 2956./hello_countがそこにリストされています。同じウィンドウで、次を使用してプロセスを停止しました。

kill -s SIGSTOP 2956

次のコマンドをもう一度入力すると、

ps -e

プロセス 2956./hello_countはまだリストされています。

次に、次のコマンドを入力して、同じウィンドウ自体でプロセスを再開しました。

kill -s SIGCONT 2956

ただし、プロセスは、実行して出力を行っていた前のウィンドウで再開されました。

別のターミナル ウィンドウで pid 2956 のプロセスを再開する (再起動しない) コマンドまたは方法はありますか?

つまり、次のような出力が必要です。

hello 8
hello 9
...

プロセスを停止する前に上記の出力を取得していたウィンドウ以外のウィンドウで。

4

1 に答える 1

2

あなたが抱えている問題は、プロセスが特定のものに接続されており、プロセスが開始されると通常はtty切り替えることができないことです。ttyこの質問を参照してください。

あなたが気にすることができるいくつかのハッキーな方法があります。

実際のコマンド ライン シナリオでは、screenを使用すると、仮想端末でコマンドを開始し、他の端末からその端末に接続できます。しかし、これはあなたの質問があなたが探していることを示しているように見えるプログラム的な解決策ではありません。

于 2012-05-24T05:24:21.957 に答える