ウィンドウを閉じた後、Xクライアントアプリケーションプロセスを終了する必要がありますか?

ウィンドウを閉じた後、Xクライアントアプリケーションプロセスを終了する必要がありますか?

Xクライアントアプリケーションのウィンドウが閉じると、アプリケーションプロセスは終了しますか(成功または失敗に関係なく終了試行のみ可能ですか)。

サポート手順が終了した場合、終了手順をどのように通知できますか?特定の信号に基づいて、基本的な作業はプロセスを終了することです。もしそうなら、信号を送るのは何ですか?

ありがとうございます。

ベストアンサー1

長すぎる博士。X11プロトコルには、プロセス、シグナル、またはあらゆる種類のIPCの概念はありません。サーバーとクライアントは、プロセスの概念がまったくない可能性がある他のシステムおよびオペレーティングシステムに存在する可能性があります。 Lispマシンは依然として重要でした。)X11プロトコル自体は、Unixソケット、tcp / ipを介して実行することも、SSHなどを介してトンネリングすることもできます。

X11ウィンドウを「閉じる」方法は3つあります。

  1. ClientMessage原子を含むイベントをWM_DELETE_WINDOWこのウィンドウに送信します。ウィンドウを作成したアプリケーションは、これを行うことができます(ウィンドウを直接終了し、他のアプリケーションはウィンドウを閉じて実行を続けることができます)、ウィンドウを無視することができますxclock。これは通常、ボタンを押すか、いくつかの「標準」キーの組み合わせ(例えば。xeyesXAlt-F4

  2. 強制的に窓を破壊してくださいXDestroyWindow。アプリケーションはこれを予期しない可能性があり、DestroyNotifyイベントを無視してまだ存在するかのようにウィンドウで操作を実行しようとする可能性があり、これによりXlibのデフォルトのエラーハンドラ(を使用してXErrorEvent設定)が印刷されます。BadWindowこの場合は、エラーメッセージを表示してクリーンアップしてくださいXSetErrorHandlerexit(3)

  3. このウィンドウを呼び出すXKillClientと、ウィンドウを作成したクライアントは強制的に閉じられます(ウィンドウの代わりにXIDpixmapなどのX11リソースを使用できます)。 [1] です。これはxkill(1)、または何の関係もなく、どのプロセスにもシグナルを送信しません。クライアントが特別な措置を講じない限り(参考資料を参照)、クライアントが生成するすべてのリソース(ウィンドウ、ピックスマップ、グラフィックスコンテキスト)は削除されます。同様に、デフォルトのXlibkill(2)kill(1)XSetCloseDownMode(3)イオこの場合、エラーハンドラ(に設定XSetIOErrorHandler)はエラーメッセージを印刷してクリーンアップします。exit(3)ptとの違い2.XSetIOErrorHandler缶を含むハンドラのセットです。いいえ返品。

一部のアプリケーションは、2.と3.を「衝突」として非常に迷惑に処理します(たとえば、Firefoxはfalseに設定しない限り、実行時に悪名高い「これはあまりにも恥ずかしい」というメッセージを表示しますbrowser.sessionstore.resume_from_crash)。

また、アプリケーションは、サーバーから追い出されたのXKillClientか、サーバー自体が予期せず終了したかクラッシュしたのかを知ることはできません。

繰り返す価値があるもう1つの事実は、X11プロトコルです協力的な設計上、X11 クライアント間に障壁と検査はありません。すべてのクライアントは他のクライアントを追い出すことができ、XKillClientウィンドウを破壊したりサイズ変更したり、キーボードまたはマウスの両方を使用したり、ウィンドウマネージャを使用するようにオーバーライドリダイレクトフラグを設定したりできます。 。

[1] 使用しない限り育児xkill -framewm、仕事に使用する必要があります。

おすすめ記事