0

開始パラメータでプロセスを終了するように設定することは可能ですか?

私がやろうとしているのは、プロセスが開始される前または開始時に終了するようにプロセスを設定することです。

cat > $pipeアンパサンドと$を追加して、開いた名前付きパイプのpidを取得しようとすると!その後、「>」記号で端末をスパムするのでcat > $pipe、PIDのSIGHUPで死ぬパラメータから始めることができるかどうか疑問に思いました。

どうすればこれを行うことができますか?の後に何かを置くcat > $pipeと、正しく機能しません。

4

2 に答える 2

1

「開かれ た名前付きパイプの pid を取得する」 名前付きパイプには pid がなく、プロセスのみに pid があります (手がかりは 'p' にあります)

ただし、それは質問のタイトルとは何の関係もないようです。デフォルトでは、プロセスは SIGHUP で終了します。ただし、子プロセスは親のシグナル マスクを継承するため、親が SIGHUP を無視した場合は、子でも同様になります (ハンドラーには当てはまりません)。したがって、(たとえば)次のようにダイスを強制できます。

trap 'exit 128' SIGHUP

しかし、質問のその部分は、名前付きパイプとどのように関連していますか? パイプが開いているプロセスを見つけようとしていますか? そのために /proc を反復処理できます。

OPからのコメントの後に編集:

実行するcat > mypipe &cat、キーボードにアクセスしようとしてハングします -catデフォルトでは STDIN を読み取ります。

[1]+  Stopped                 cat > mypipe

そのため、データを入力するために forground( fg) に持ち込む必要があり、通常は で終了し<CTRL>+Dます。なぜこのように使いたいのか、私には途方に暮れていますcat

とにかく、バックグラウンドで実行している場合、バックグラウンド ジョブの pid を取得するのは非常に簡単です。
ジョブ番号 1 であると仮定します。

set $(jobs -l %1)
pid=$2

ジョブをバックグラウンドで実行できない理由をさらに調査し、例を示すことができるかもしれません (scriptコマンドを使用して、セッションのコピーを というファイルに取得しますtypescript) 。

于 2012-07-03T07:49:16.700 に答える
0

括弧に入れてみた?(cat > $pipe) &$

于 2012-07-03T04:42:15.050 に答える