0

標準エラーをファイルにダンプするために使用するコードを以下に示します。

    sudo COMMAND 2> FILENAME.txt

PID を取得してから、次のように KILL を使用して、COMMAND プロセスを強制終了できるようにしたいと考えています。

    sudo COMMAND 2> FILENAME.txt &
    PID=$!
    sudo kill $PID

私が持っている質問は、「コマンド」プロセスを強制終了していますか、それとも「エラーをファイルにダンプ」プロセスを強制終了していますか??

「エラーをファイルにダンプ」プロセスを強制終了する場合、実際のコマンド プロセスを強制終了するにはどうすればよいですか?

4

3 に答える 3

2

標準 IO をファイルにリダイレクトすることはプロセスではありません。プロセスを強制終了しますsudoが、プロセスは終了時にファイルハンドルを閉じる必要があります。つまり、コマンドが実行される前にリダイレクトが発生するsudoため、ユーザー アカウントに write のアクセス許可がない場合FILENAME.txt、シェルはコマンドを実行する前にエラーになります。

参照: https://unix.stackexchange.com/questions/1416/redirecting-stdout-to-a-file-you-dont-have-write-permission-on

于 2013-10-08T17:52:02.947 に答える
2

プロセスは 1 つだけsudoです。

  1. シェルは、シェルの子である新しいプロセスをフォークします。
  2. その標準エラーはファイルにリダイレクトされます。
  3. コマンドsudo commandexec()子プロセスで ed です。
  4. 親は、子プロセスの PID を に格納します$!

sudo次に、その構成に従ってアクセス許可を設定し、別の実行を実行exec()して自分自身を に置き換えますcommand

于 2013-10-08T17:55:24.130 に答える
0

すべてのプロセスは、開始時に親プロセスから特定のものを継承します。それらの 1 つは、開いているファイル ハンドルのセットです (POSIX では、これには少なくとも標準入力、標準出力、および標準エラーが含まれますが、他のものも同様に可能です)。リダイレクション オペレータは、新しいプロセスに渡されるファイル ハンドルを変更するだけです。

于 2013-10-08T18:54:24.167 に答える