Как я могу закрыть пиджин через команду?
Проблема была описана по адресу https://developer.pidgin.im/ticket/9698.
В Linux я могу попросить pidgin закрыть через pkill pidgin
или же kill [pid]
, Затем программа позаботится об этом и отключится.
Windows не работает таким образом. WM_CLOSE
сигнал будет только закрыть окно, а не процесс (так же, как когда вы нажмете x
сам).
Как мне закрыть пиджин через команду?
Мотивация. Похоже, что многим серверам XMPP нужно, чтобы клиенты активно прощались, чтобы понять, что они не в сети. Другими словами, нет keep-alive
пакеты необходимы или нет тайм-аутов (и если, довольно задерживается). Обычно это не является большой проблемой, потому что мы запускаем и покидаем наших клиентов соответственно (считая завершение работы как выход). Тем не менее, если кто-то идет в suspend
/ hibernate
В этом режиме подключение к сети внезапно пропало - у pidgin нет шансов сказать: "Привет, выход в автономный режим". Итак, мне нужен скрипт для автоматического корректного закрытия pidgin (чтобы он выполнялся непосредственно перед приостановкой).
2 ответа
Утилита, которую вы хотите taskkill.exe
, которая является программой командной строки, встроенной в ОС Windows (примерно аналогично kill
в Unix-подобных системах) и находится в системном каталоге (C:\Windows\System32\taskkill.exe). По умолчанию он запрашивает (но не заставляет) программы завершать работу и не использует оконные сообщения.
Бежать taskkill /?
из командной строки (cmd
или же powershell
) для получения информации об использовании, но основная команда, которую вы хотите, это taskkill /im pidgin.exe
(обратите внимание, что расширение необходимо для имени образа программы, которую нужно убить). НЕ передавайте /f
отметьте здесь, так как это принудительно завершит программу (аналогично kill -9
) без предоставления времени для выполнения какой-либо очистки (хотя это полезно для программ, которые вы хотите немедленно убить, или которые зависают и не отвечают на обычные запросы на закрытие).
Получить автоматический запуск при выходе из системы может быть сложно; рассмотреть возможность использования планировщика заданий.
Вот скрипт AutoHotkey, который эмулирует следующие шаги пользователя:
- Откройте главное окно, если оно еще не открыто
- Отправить Ctrl-Q, чтобы пиджин вышел
,
pidginMainWindowTitle := "Buddy List"
process, exist, pidgin.exe
if(ErrorLevel!=0) {
; Pidgin process is running -> close it
if(!winExist(pidginMainWindowTitle)) {
; ..but main window is not.
; determine full pidgin path
winGet, pidginPath, ProcessPath, ahk_exe pidgin.exe
if(pidginPath=="") {
msgbox, Process path empty?
exitapp
}
; run pidgin again: will open main window
run %pidginProcessPath%
; wait for the window max. 2 seconds
winWait, %pidginMainWindowTitle%,, 2
if(ErrorLevel==1) {
msgbox, Couldn't start main window
exitapp
}
; send exit key combo to pidgin main window
controlSend,, ^q, %pidginMainWindowTitle%
; wait for the process to close max. 2 seconds
process, WaitClose, pidgin.exe, 2
if(ErrorLevel) {
msgbox, Couldn't exit pidgin gracefully
exitapp
}
}
}