Icedove(Thunderbird)의 여러 인스턴스(프로필)를 사용하고 있는데 사용하는 모든 인스턴스를 종료해야 하는 경우:
killall icedove
man killall
신호 이름이 지정되지 않은 경우 SIGTERM
전송됩니다 .
And, `SIGTERM` allows the process to perform nice termination releasing
resources and saving state if appropriate.
플러그인을 설치한 후 Icedove를 종료하면 플러그인에 대한 구성 변경 사항이 손실되었습니다. 단계를 반복하고 Icedove를 제대로 닫아야 했습니다(메뉴에서 종료 사용).
나는 이것이 단지 일화적인 증거라는 것을 알고 있습니다. 나는 결정적인 주장을 하기에는 충분한 관찰력이 없습니다.
하지만 아직도,종료 요청을 다음보다 더 좋게 만드는 것이 가능합니까?killall <processname>
, Menu->Exit?를 사용하여 애플리케이션을 닫는 것처럼 종료가 깔끔하게 이루어지도록 합니다.
답변1
신호 용어허용하다종료하기 전에 정리를 수행하는 프로세스이지만 프로세스가 실제로 수행하는지 여부와 수행하는 정리 유형은 프로그램 작성 방법과 프로그램이 작성되는 언어의 기능(어느 정도)에 따라 다릅니다. 따라서 프로그램이 SIGTERM을 수신하면 아무것도 저장할 의무는 없지만 현재 열려 있는 파일은 모두 닫힐 가능성이 높습니다.
SIGUSR1과 같이 SIGTERM보다 "더 나은" 신호가 있지만 프로그램은 해당 신호를 수신하도록 특별히 작성되지 않는 한 이러한 신호를 무시합니다.
답변2
wmctrl
특정 응용 프로그램의 모든 창을 정상적으로 닫는 데 사용할 수 있습니다 . 1 (내가 아는 한"메뉴->종료를 사용하여 애플리케이션을 닫는 것만큼 깔끔합니다.").
앱 사용 wm_class
:
for win in $(wmctrl -lx | awk '$3 ~ /Icedove/ {print $1}'); do wmctrl -ic "$win"; done
앱 사용 pid
:
for win in $(wmctrl -lp | awk -v icepid=$(pgrep icedove) '$3 == icepid {print $1}'); do wmctrl -ic "$win"; done
1: 트레이 지원 앱의 경우 앱을 닫으면 트레이로 최소화됩니다. 이미 트레이에 있으면 -c
아무 작업도 수행되지 않습니다. wmctrl
이 상황에 대한 대체 종료 또는 "kill" 명령은 없습니다(원천).