Linux: zamknij program za pomocą wiersza poleceń (nie zabijaj go)

21

Niektóre aplikacje zezwalają tylko na jedną działającą instancję (np. Eclipse, jeśli chcesz korzystać z tego samego obszaru roboczego). Więc jeśli loguję się z innej lokalizacji, muszę zabić / zamknąć aplikację, która była otwarta, kiedy wcześniej logowałem się z innej lokalizacji.

Zawsze używam polecenia kill, aby zabić uruchomiony proces. Ale jeśli zabijesz proces, może nie zapisać niektórych stanów, które są przydatne do wykorzystania w przyszłości. Jeśli jednak „zamkniesz” go poprawnie, na przykład klikając przycisk zamykania, spowoduje to prawidłowe zapisanie stanów.

Czy istnieje sposób na prawidłowe „zamknięcie” aplikacji z wiersza poleceń? Wiem, że może się to różnić od aplikacji, więc bądźmy bardziej ogólni: jak wysłać sygnał do innej uruchomionej aplikacji, a ten sygnał działa tak, jakbyśmy kliknęli przycisk „zamknij” na górnym pasku?

Wendeta
źródło
2
Czy należy założyć, że zdalny dostęp do pulpitu za pomocą VNC, a następnie graficzne zamknięcie to zbyt duże obciążenie.
Brian Swift

Odpowiedzi:

33

Domyślnie polecenie kill wyśle SIGTERM(sygnał zakończenia) do uruchomionego procesu. W przeciwieństwie do tego SIGKILL, który siłą zabije proces bez szansy na odpowiedź, SIGTERMsygnał może zostać przechwycony przez proces, pozwalając mu zakończyć się z wdziękiem. Czy to faktycznie ma zakończyć wdziękiem jest całkowicie zależne od samego procesu; równie łatwo może się zabić lub całkowicie zignorować sygnał.

Możesz upewnić się, że wysyłasz SIGTERMzamiast jakiegoś innego sygnału, wyraźnie zaznaczając go w wierszu poleceń:

kill -s TERM <pid>
goldPseudo
źródło
1
Tak, przesłanka PO jest fałszywa. killPolecenie próbuje wdzięku wyłączył. Jeśli w takim przypadku aplikacja nie zostanie poprawnie zamknięta, jest zepsuta. (I ogromna większość wniosków nie jest zepsuta.)
David Schwartz
2
Firefox wydaje się (zepsuty). Jeśli uruchomię kill -s TERM <firefox-pid>, nie zamknie się z wdziękiem, a kiedy uruchomię go ponownie, zapyta mnie, czy chcę odzyskać zawieszoną sesję. : westchnienie:
Wilson F.
6

Zauważ, że jeśli używasz pkillzamiast kill, aby określić TERM, składnia jest następująca:

pkill -TERM <process-name>

pkill jest jak zabicie, ale możesz użyć nazwy procesu zamiast identyfikatora. man pkill

Connor McCormick
źródło