これは一連のコマンド、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
という名前の登録済み「サーバー」がある場合 すでにユーザーごと/ログインごとのデスクトップバス、gedit
2番目以降のインスタンスであると判断します。最初のインスタンスへのデスクトップバスメッセージを作成し、コマンドラインオプションと引数を渡してそして単に終了します 。
したがって、表示される内容は、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。ランチパッド。