1

Linux ベース (UNIX ベース) のシステムでは、すべてのプロセスがいわゆるcmdline. プロセスの存続期間中に変更しても問題ありませんか? たとえば、cmdline進行状況/デバッグ情報を変更します。
プロセスの操作に関する制限/規則はありますcmdlineか?

なぜ私は尋ねているのですか?cmdlineプロジェクトでは、特定のサブシステムを監視するために、 for workerを変更したアプローチを広く使用しています。読み取りcmdlinesには、Python ライブラリ psutil を使用しています。しかし、いくつかのバージョンから、このユーティリティcmdlineはプロセスのキャッシュを開始しました。私はそれについてバグを作成しましたが、著者の1人は、cmdlineプロセスの存続期間中に変更すべきではないと主張しています(バグへのリンク

助言がありますか?

ありがとう。

変更中のUPDATEcmdlineプロセスの exec 引数を変更するつもりはありません。proctitle を変更しようとしています (http://www.unix.com/man-page/FreeBSD/3/setproctitle/)

4

3 に答える 3

1

コマンドのプロセスの名前を変更する状況が 1 つだけあります。それは、#! が付けられたサブプロセスを使用してスクリプトを実行し、killall ですばやく見つけるのが困難な場合です。

この例は、次のように #! を付けた「foobar」という名前の Python スクリプトを実行しています。

#!/usr/bin/python

...

これはpsに次のように表示されます

   0 18852 18810   0  1:09AM ttys006    0:03.50 /usr/bin/python -B ./foobar

この場合、プロセスの名前を変更すると、エグゼキュータとの期待が一致するため、有益です。何かがおかしくなった場合は、拡大鏡を取り出すことなく、すぐに killall を発行できます。プロセスを停止させたいときは、プロセスを停止させます。

ただし、スレッドの名前を変更する場合は?私はセロリドでそれを見つけましたが、それは無償で不必要に「賢い」ことがわかりました。私はそれに対してお勧めします。プロセスを列挙し、全員の proc 構造を調べて少しの状態情報を抽出するコストは、単に syslog や stdout/err に記録するよりもはるかにコストがかかるため、スレッドの状態を見つけることが有用であるという議論は議論の余地があります。

Linux を使用していて、/proc ファイルシステムを列挙している場合は、さらにコストがかかると思います。

プログラムの開始方法に関する情報を「失う」ため、変更してはならないという議論..少なくともLinuxでは、/proc//cmdlineにはデフォルトで4096の制限があるため、私はそれにはあまり同意しません私は信じています-プロセス引数の最大長は、1024 * 1024バイトのような巨大なものです。(考えてみてください: ls -l /dir/with/100_thousand_files/*)

したがって、「本物の」コマンドラインがあることが保証されているわけではなく、そこに期待するべきではありません。

于 2012-09-25T08:14:29.677 に答える
0

私はそれを変えてはならないと主張した人に同意しなければなりません。コマンドラインは、プログラムの呼び出し元が引数として提供したものです。あなたはそれをいじくり回すのは賢明ではありません。

子プロセスにさまざまなコマンドライン引数を指定する場合は、それらを「実行」するときに実行します。それがあなたが「労働者」によって意味したものであるかどうかはわかりませんが、あなたの質問は概念について少し曖昧です。

おそらく、その要件をどのように実装しようとしているのかではなく、要件が何であるかを(詳細に)説明すると役立つ場合があります。

于 2012-09-25T08:04:14.950 に答える
0

プロセスで変更されない唯一のものは、プロセス ID です。それとは別に、何でも変更できます。たとえば、プロセスがexecシステム コールを実行すると、コード セグメントとデータ セグメントが変更され、コマンド ラインも変更されます。

すべてのキャッシング システムは速度を向上させますが、一部のデータはリアルタイムで変更する必要があり、キャッシュを含むシステム ロジックはそれに対応する必要があります。

于 2012-09-25T10:41:55.657 に答える