Intereting Posts
Функция VIM для создания нового файла с заголовком, включая имя файла и временную метку Как получить информацию о слове, размере адреса, размере адресной шины, размере шины данных и размере шины? Установка шрифта emacs по умолчанию не сохраняется (построена из исходной ОС X 10.8) В чем смысл «\ _» в выводе «ps ef»? Приложение не может выполнить из-за проблемы с общей библиотекой Arch Linux привязывает медиа-ключи к сценарию bash Может ли звездочка настроить трехсторонний вызов на аналоговой (классической) линии? Разница между виртуальными интерфейсами с ifconfig и iproute2 Отключить KDE Wallet из командной строки Как файловая система / организация Linux отличается от Windows? Apache, не может ссылаться на Домашний каталог, Alias ​​не работает фильтрация данных на основе разделителя в оболочке Реализация Cocoa API для Linux? Не удается запустить службу MySQL на недавно обновленной виртуальной машине Почему буферы равны используемой памяти?

не может убить процесс gedit из своего PID

Это последовательность команд, начинается gedit , но она не может быть убита из идентификатора процесса

 $ 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 уже завершен.

Помните, как приложения Windows в основном работали в Win16 за несколько дней до того, как Win32 пришла и покончила с собой: где были hInstance и hPrevInstance , попытка запустить второй экземпляр многих приложений просто передала вещи первому экземпляру, и это сделало вещи (например, Take Command), потому что второй раз вызывал приложение, он явно присутствовал бы на экране в виде добавленного окна, но в том, что касается интерпретатора команд, дочерний процесс, который он только что запускал немедленно вышел?

Ну, GNOME вернула поведение Win16 для Linux.

С приложениями GIO, такими как gedit , приложение ведет себя следующим образом:

  • Если нет зарегистрированного «сервера» с именем org.gnome.gedit уже на org.gnome.gedit для каждого пользователя / для входа в систему, gedit решает, что это первый экземпляр. Он становится сервером org.gnome.gedit и продолжает работать.
  • Если зарегистрированный «сервер» с именем org.gnome.gedit уже org.gnome.gedit для каждого пользователя / каждого пользователя, gedit решает, что это второй или последующий экземпляр. Он создает сообщения Bus Bus для первого экземпляра, передавая его параметры и аргументы командной строки, а затем просто выходит .

Итак, что вы видите, зависит от того, запущен ли сервер gedit . Если вы этого не сделали, вы будете в обуви sebvieira и задаетесь вопросом, почему вы не видите описанное поведение. Если у вас есть, вы будете в ваших силах и видите, что процесс gedit заканчивается почти сразу, тем более, что вы не предоставили ему никаких параметров командной строки или аргументов для отправки в «первый экземпляр». Следовательно, причина в том, что с этим идентификатором больше нет процесса.

Большая забава возникает, когда, как упоминалось выше, рабочая шина для каждого входа переключается на «новый» стиль для пользовательской настольной шины, и внезапно нет связи 1: 1 между настольной шиной и дисплеем X любой Больше. Однопользовательские экземпляры с единой пользовательской шиной внезапно должны быть способны одновременно разговаривать с несколькими X-дисплеями.

Дальнейшее веселье возникает, когда люди пытаются запустить gedit в качестве суперпользователя через sudo , так как он либо не может подключиться к пользовательской Desktop Bus, либо подключается к неправильной (суперпользователю) Desktop Bus.

Есть предложение предоставить gedit командной строки, который заставляет процесс, который вызывается, быть только фактическим приложением редактора , так что gedit будет полезен в качестве редактора, на который указывает EDITOR среды EDITOR (которая не для многих общие обычаи EDITOR , от crontab до git , когда он сразу же выходит). Это предложение еще не стало реальностью.

В то же время у людей есть разные способы иметь простой второй экземпляр «легкого текстового редактора», например, при вызове всего нового экземпляра Desktop Bus, частного для вызова gedit , с dbus-run-session . Конечно, это, как правило, приводит к разворачиванию других серверов GNOME Desktop Bus на этом частном автобусе, поскольку они, в свою очередь, вызваны gedit , что делает его не «легким» вообще.

Обледенение на торте – это когда вы следовали этой рекомендации или тому подобное, и вложили в нее функцию оболочки gedit которая немедленно удаляет процесс gedit из списка заданий оболочки. Процесс не только быстро заканчивается, так что вы не видите его позже с kill или ps , но оболочка даже не контролирует его как работу, управляемую оболочкой.

дальнейшее чтение

  • Приложения / Gedit / NewSingleInstance . GNOME wiki. 2013.
  • « Описание ». GApplication . Вики-страница GNOME Developers.
  • https://stackoverflow.com/questions/7553452/
  • Стефан Лёффлер (2011-05-04). не запускает повторяющийся экземпляр при запуске с nautilus . Ошибка № 777292. Launchpad.

Извините, но это работает для меня:

 $ gedit& [1] 9391 $ t=$! $ echo $t 9391 $ kill $t [1]+ Terminated gedit 

Убедитесь, что процесс все еще существует, выполняя ps -ef или pidof gedit . Если это так, вы можете просто kill $(pidof gedit)

Я пробовал следующий код, и он работал в скрипте, дайте ему попробовать

  gedit& t=$! echo $t #sleep 2 kill -9 $t