
これはコマンドシーケンスです。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
プロセスを終了する方法は?
答え1
gedit
これすでに終了。
Win32が登場し、それを取り除く前にWin16日を覚えてください。 Windowsアプリケーションが主にどのように機能したかを思い出してくださいhInstance
。hPrevInstance
コマンドスクリプトツール(Take Commandなど)を使用すると、アプリケーションを2回目に呼び出し、画面にはっきりと追加されたウィンドウとして表示されますが、コマンドソルバーに関する限り、実行したばかりのサブプロセスはすぐに終了しますか?
GNOMEはLinux用のWin16の動作を復元します。
このようなGIOアプリケーションの場合、gedit
アプリケーションは次のように動作します。
org.gnome.gedit
ユーザー別/ログイン別のデスクトップバスに名前付き登録サーバーがない場合は、gedit
最初のインスタンスとして決定されます。それ~になるサーバーをorg.gnome.gedit
実行し続けます。org.gnome.gedit
ユーザー別/ログイン別のデスクトップバスにすでに名前が付けられている登録サーバーがある場合は、gedit
2番目または後続のインスタンスとして決定されます。コマンドラインオプションと引数を渡して、最初のインスタンスのデスクトップバスメッセージを設定します。その後、簡単に終了してください。。
したがって、表示される内容は、gedit
サーバーがすでに実行されているかどうかによって異なります。これを行っていない場合は、Sevieraの立場で説明されている動作を見たことがない理由がわかります。もしそうなら、あなたはあなたの場所にいて、プロセスがgedit
ほぼすぐに終了するのを見るでしょう。特に、「最初のインスタンス」に送信するコマンドラインオプションやパラメータを指定していないためです。したがって、もはやそのIDを持つプロセスはありません。
上記のように、ログインごとのデスクトップバスが「新しい」スタイルのユーザー固有のデスクトップバスに切り替わり、突然デスクトップバスとXディスプレイの間に1:1の関係がなくなると、多くの楽しみが発生します。もっと。シングルユーザーバス範囲インスタンスアプリケーションは、突然複数のXモニターと同時に通信できる必要がありました。
gedit
スーパーユーザーとして実行しようとすると、sudo
各ユーザーのデスクトップバスに接続できないか、間違った(スーパーユーザーの)デスクトップバスに接続するため、より面白いことが発生します。
誰かがgedit
呼び出しプロセスを有効にするコマンドラインオプションを提供することを提案しました。実際のエディタアプリケーションgedit
したがって、エディタは環境変数(すぐに終了したときのfrom toの多くの一般的な用途EDITOR
では機能しません)によって指定されるため、これは便利です。この提案はまだ現実にはなっていません。EDITOR
crontab
git
同時にgedit
、呼び出し専用の完全に新しいデスクトップバスインスタンスを呼び出すなど、さまざまな方法で「軽量テキストエディタ」の2番目の単純なインスタンスを取得できますdbus-run-session
。もちろん、これはそのプライベートバスで順番に呼び出される他のGNOMEデスクトップバスサーバーを起動する傾向がgedit
あり、まったく「軽量」ではありません。
最も重要なのは、あなたが従う時ですこの提案または、同様のものとしてシェルタスクリストからプロセスをgedit
すぐに削除するシェル関数を挿入します。後で使用または表示gedit
できないようにプロセスがすぐに終了するだけでなく、シェルはそれをシェル制御操作として監視しません。kill
ps
追加読書
- アプリケーション/Gedit/NewSingleInstance。 GNOME Wikipedia。 2013年。
- 」説明する..GNOME
GApplication
開発者Wiki。 - https://stackoverflow.com/questions/7553452/
- ステファン・レプラ(2011-05-04)。 Nautilusから起動したときに実行中のインスタンスを再利用しないでください。。バグ#777292。発射台。
答え2
申し訳ありませんが、これは私にとって効果的でした。
$ gedit&
[1] 9391
$ t=$!
$ echo $t
9391
$ kill $t
[1]+ Terminated gedit
ps -ef
プロセスがまだ存在するかどうかを実行または確認しますpidof gedit
。もしそうなら、これもできますkill $(pidof gedit)
答え3
次のコードを試しましたが、スクリプトで動作します。試してみてください。
gedit&
t=$!
echo $t
#sleep 2
kill -9 $t