не может убить процесс 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 ?

3 Solutions collect form web for “не может убить процесс gedit из своего PID”

Процесс 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 
  • Как проверить, имеет ли файл уже строку с содержимым?
  • Скобки в условии if: почему я получаю синтаксические ошибки без пробелов?
  • Правильный синтаксис для использования awk в сочетании с другой командой внутри xargs sh -c
  • Батарея в URxvt?
  • Поиск среди содержимого большого количества текстовых файлов?
  • Как сделать аргумент cd аргументов нечувствительным?
  • Как считать события фразы в grep, игнорируя случай?
  • Создать фальшивую оболочку в Linux?
  • Как вы просматриваете подкаталог, где путь содержит пробелы?
  • Передавать команды сценарию, который ждет ввода на машине Linux
  • sed восклицательные знаки
  • Linux и Unix - лучшая ОС в мире.