2016-06-01 3 views
0

デーモンには独自のユーザが存在する可能性があるため、サービスによってrootユーザとしてプロセスを実行します。`su - user c`を使用してLinuxで別のユーザとしてコマンドを実行すると、重複したプロセスが作成されます

しかし、私はsystem("su - root c ./testbin")でそれを実行すると、システムは、2つのプロセス(私はps aux | grep testbinを経由して、これをチェック)を示しています。単一のプロセスを達成するためにどのように

su - root c ./testbin 

./testbin 

を?

答えて

0
ps aux | grep testbin | grep -v grep 

「grep」プロセスが表示されると思います。上記のコマンドを使用してください。

0

"su"プロセスは避けられませんが、testbinが処理する前に終了させることができます。 「スリープ」を使用してあなたの元の質問には、次のようになります。

(su - root -c "sleep 120" &) ; ps aux | grep sleep 

あなたはその行を複数回実行する場合は、grepの結果として、複数の「SU」のプロセスが表示されます。サブプロセスをバックグラウンド化 はこのように、最後までSUプロセスを可能にする:

(su - root -c "sleep 120 &" &) ; ps aux | grep sleep 

あなたが「SU」プロセスがリストから消えていることが、スリープコマンドが継続することを確認することができ、その行を複数回実行

二重引用符内のアンパサンドはサブプロセス用であり、括弧の直前のアンパサンドは質問を1行で実行し、このケースをテストするのに必要な 'su'コマンド用であることに注意してください。

「execv」と同等のコマンドラインが存在するかどうかを確認しましたが、そうは思われません。また、 'su'は呼び出し元の権限で実行されるプロセスであり、suのサブプロセスは 'su'によってforkされたプロセスの権限で実行されます。セキュリティ上の理由から、 'exec'が 'C'で行うように 'su'プロセスを子プロセスに置き換えることはできません。

+0

答えていただきありがとうございます。私のtestbinプロセスのみをリストアップしています。実際はsuコマンドプロセスでした。 –

関連する問題