これは一連のコマンド、gedit 起動しますが、プロセスIDから強制終了することはできません
$ gedit&
$ t=$!
$ echo $t
4824
$ kill $t
bash: kill: (4824) - No such process
sleepでも問題なく動作します
sleep 999&
[1] 4881
$ t=$!
$ echo $t
4881
$ kill $t
$ ps -p $t
[1] Terminated sleep 999
違いは何ですか? geditはどのようにできますか プロセスは終了しますか?
承認された回答:
gedit プロセスはすでに 終了しました。
Win32が登場して廃止される前のWin16日間に、Windowsアプリケーションが主にどのように機能していたかを思い出してください。hInstanceがあった場所です。 およびhPrevInstance 、多くのアプリケーションの2番目のインスタンスを実行しようとすると、最初のインスタンスに物事が渡されるだけで、コマンドスクリプトツール(Take Commandなど)では、アプリケーションを2回呼び出すと、目に見えてそこにあるため、物事が困難になります。画面は追加ウィンドウとして表示されますが、コマンドインタープリターに関する限り、実行したばかりの子プロセスはすぐに終了しましたか?
GNOMEは、Linux用のWin16の動作を復活させました。
geditなどのGIOアプリケーションを使用する 、アプリケーションは次のように動作します:
-
org.gnome.geditという名前の登録済みの「サーバー」がない場合 すでにユーザーごと/ログインごとのデスクトップバス、geditそれが最初のインスタンスであると判断します。 になるorg.gnome.geditサーバーを実行し続けます。 -
org.gnome.geditという名前の登録済み「サーバー」がある場合 すでにユーザーごと/ログインごとのデスクトップバス、gedit2番目以降のインスタンスであると判断します。最初のインスタンスへのデスクトップバスメッセージを作成し、コマンドラインオプションと引数を渡してそして単に終了します 。
したがって、表示される内容は、geditがあるかどうかによって異なります。 サーバーはすでに実行されています。そうでない場合は、sebvieiraの立場になり、説明されている動作が表示されないのはなぜか疑問に思うでしょう。持っている場合は、あなたは自分の立場になり、geditを見ることになります。 特に「最初のインスタンス」に送信するコマンドラインオプションや引数を指定していないため、プロセスはほぼ即座に終了します。したがって、そのIDを持つプロセスが存在しない理由。
上記で触れたように、ログインごとのデスクトップバスがユーザーごとのデスクトップバスの「新しい」スタイルに切り替えられ、突然、デスクトップバスとXディスプレイの間に1:1の関係がなくなると、非常に楽しいことが起こります。もっと。単一のユーザーバス全体のインスタンスアプリケーションは、突然、複数のXディスプレイと同時に通信できる必要があります。
人々がgeditを実行しようとすると、さらに陽気になります sudoを介してスーパーユーザーとして 、ユーザーごとのデスクトップバスに接続できないか、間違った(スーパーユーザーの)デスクトップバスに接続するためです。
geditを提供する提案があります 呼び出されるプロセスを実際のエディタアプリケーションにするコマンドラインオプション 、そのためgedit EDITORが指すエディタとして役立ちます 環境変数(EDITORの多くの一般的な使用法ではありません 、crontabから gitへ 、すぐに終了する場合)。この提案はまだ実現していません。
それまでの間、geditの呼び出し専用のまったく新しいDesktopBusインスタンスを呼び出すなど、「軽量テキストエディタ」の単純な2番目のインスタンスを作成するさまざまな方法があります。 、dbus-run-sessionを使用 。もちろん、これは、このプライベートバス上の他のGNOMEデスクトップバスサーバーがgeditによって呼び出されるため、それらを起動する傾向があります。 、「軽量」ではありません。
ケーキのアイシングは、この推奨事項またはそれに類似した推奨事項に従い、geditという名前のシェル関数を挿入したときです。 geditをすぐに削除します シェルのジョブリストから処理します。プロセスが急速に終了するだけでなく、後でkillで表示されないようにします またはps 、しかし、シェルはそれをシェル制御のジョブとして監視することすらしません。
さらに読む
- Apps / Gedit/NewSingleInstance。 GNOMEwiki。 2013年。
- 「説明」。
GApplication。 GNOME開発者のwiki。 - https://stackoverflow.com/questions/7553452/
- ステファン・レフラー(2011-05-04)。 nautilusから起動した場合、実行中のインスタンスを再利用しません。バグ#777292。ランチパッド。