UNIX-yの方法では、プロセスを開始し、バックグラウンドにして、そのプロセスの寿命をシェルに結びつけようとしています。プロセスを始動したシェルにプロセスの寿命を結ぶ
私が話しているのは、単にプロセスをバックグラウンドにするだけではなく、プロセスがSIGTERMに送られるようにするか、閉じたオープンファイルディスクリプタを持っているか、何かシェルが終了するときです。シェルのユーザーが明示的にプロセスを強制終了したり、「あなたはジョブを実行しています」という警告を出す必要はありません。
最終的には、各シェルに対して一意に実行し、そのシェルと共に状態を運び、シェルが終了すると閉じることができるプログラムが必要です。
IBMのDB2コンソールコマンドは、このように動作します。データベースに接続すると、データベース状態と接続を持ち、それをシェルに結びつける "db2bp"プロセスが生成されます。複数の異なる端末またはssh接続でそれぞれ独自のdb2bpプロセスを使用して接続できます。これらの接続がクローズされると、適切なdb2bpプロセスが終了し、その接続がクローズされます。
DB2クエリーは、db2コマンドで開始されます。これは、適切なdb2bpプロセスに渡すだけです。私はそれがどのように db2bpプロセスと通信するのか分かりませんが、stdinに固有のキーとして接続されているttyデバイスを使用していますか?私もそれを理解する必要があると思います。
私はtty操作を行うことは一度も書かなかったので、どこから始めるべきかわからない。私はシェル出口で自動的に殺されるプロセスを生成することができれば、残りを把握できると思います。誰でもDB2がどのようにそれを行うのか知っていますか
うん、それは動作します!私はdb2がどのようにそれを行うのかを理解しましたが、これはまったく同じではありませんが、これは非常に短く単純です。私のperlはそれほど素晴らしいものではありません...(t)テスト中は何ですか? – Kyren
ああ、見つかりました。 -tはデフォルトでstdinになり、ファイルがttyに開かれているかどうかをテストします。かなり滑らかです。 – Kyren