2012-01-23 12 views
2

私はいくつかの子プロセスをフォークするサーバーアプリケーションを持っています。 pstopまたはprstatのプロセスを表示する場合は、親プロセスとまったく同じように表示されます。私はpidppidによって親と子であることを知ることができますが、それはすぐに難しくなります。私は子プロセスの名前を少し変更して、何が何をするのかを素早く見ることができるようにしたいと思います。CのSolaris上でフォークされたプロセスの名前を変更する方法は?

Linux上ですべてがうまく動作するいくつかのトリックを試しましたが、Solarisではそうではありません。誰でもそれを行うことができ、好ましくはプレーンCで可能であることを知っていますか?

答えて

1

子プロセスの実際の実行可能プログラムを作成し、execメソッドの1つをforkから呼び出す方法の1つです。

このように、フォークされたプロセスは、新しい実行可能ファイルで「置き換えられる」でしょう。

これらの線に沿って何か:

pid_t child_pid = fork(); 

    switch (child_pid) 
    { 
    case -1: 
    die(); 
    return; 

    case 0: 
    // setup argv ... 
    static const char* argv[] = 
    { 
     "prog_name", 
     NULL 
    }; 

    execv(*argv, (char**) argv); 
    // No code should be executed beyond this point 

    fprintf(
     stderr, 
     "%s fork: execv failed: %d (%s)\n", 
     argv[ 0 ], 
     errno, 
     strerror(errno) 
    ); 

    die(); 
    return; 
    default: 
    break; 
} 
+0

良いアイデアが、私は積極的にプロセスデータのCOW機能を使用すると、残念ながら、これは全体のことが非常に複雑になるだろう。私は、プロセス間で共有される膨大なメモリマップ(約4Gb)を持っており、execvを使用するとすべてのマッピングをやり直すことになります。やっても大変な作業です。 –

関連する問題