Linux/NPTLでは、スレッドは何らかのプロセスとして作成されます。
プロセスの一部に奇妙なコマンドラインがあることがわかります。
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
プロセスの各スレッドでそれを行う方法を知っていますか? これは、デバッグに非常に役立ちます。
/me 現在 HAL ソースで調査中
Linux/NPTLでは、スレッドは何らかのプロセスとして作成されます。
プロセスの一部に奇妙なコマンドラインがあることがわかります。
cat /proc/5590/cmdline
hald-addon-storage: polling /dev/scd0 (every 2 sec)
プロセスの各スレッドでそれを行う方法を知っていますか? これは、デバッグに非常に役立ちます。
/me 現在 HAL ソースで調査中
複数の Unix バリエーションで動作する移植可能な方法でこれを行いたい場合、使用できるオプションはほとんどありません。
あなたがしなければならないことは、呼び出し元プロセスがargv [0]
、プロセス出力で見たい名前を指す引数と実際の実行可能ファイルを指すファイル名で exec を呼び出さなければならないということです。
以下を使用して、シェルからこの動作を試すことができます。
exec -a "This is my cute name" bash
これにより、現在の bash プロセスが という名前のプロセスに置き換えられ"This is my cute name"
ます。
C でこれを行うには、広範囲に移植されたソフトウェアのソース コードsendmail
またはその他の部分を調べて、これをサポートするためにオペレーティング システム間で必要なすべてのバリエーションを見つけることができます。
一部のオペレーティング システムにはsetproctitle(3)
API があり、一部のオペレーティング システムでは内容をオーバーライドしargv [0]
てその結果を表示できます。
argv
書き込み可能な文字列を指します。それらに何かを書くだけです:
#include <string.h>
#include <unistd.h>
int
main(int argc, char** argv)
{
strcpy(argv[0], "Hello, world!");
sleep(10);
return 0;
}
ああ..コードはそれほど良くありません.トリックはenviron(ここではargv_buffer)ポインタを再利用することです:
memset (argv_buffer[0] + len, 0, argv_size - len);
argv_buffer[1] = NULL;
もっと良いアイデアはありますか?
それは異なるスレッドで機能していますか?