2009-02-05 10 views
54

Używam długiego programu na zdalnej maszynie i chcę go zatrzymać, ale moim problemem jest to, że jeśli użyję polecenia kill, program zakończy działanie bez zapisywania wyników . Zwykle to, co robię, aby ukończyć program, to ctrl c, w takim przypadku program zapisuje wyniki, ale w tej chwili nie jestem w komputerze, który uruchamia sesję, więc nie mogę zrobić ctrl c.Ekwiwalent ctrl c w poleceniu anulowania programu

Moje pytanie brzmi: czy istnieje sposób na zdalny sposób równoważny ctrl c ?.

Odpowiedz

79

Spróbuj:

kill -SIGINT processPIDHere 

Zasadniczo Ctrl C wysyła sygnał do SIGINT (przerwania) podczas kill wysyła sygnał do SIGTERM (zwolnień) domyślnie chyba podać sygnał do wysłania.

+0

Jak znaleźć identyfikator processPID? Używam powłoki internetowej do testowania pingów na moim routerze, a następnie nie mogę zabić procesu ... –

+1

@AeroWang można uruchomić wyszukiwanie procesu 'ping' w ten sposób:' ps aux | grep "ping" ', pierwsza liczba w kolumnie to pid. – adrianTNT

+0

Niestety informacja ping stdout przytłoczyłaby ludzkie wejście. @adrianTNT –

6

ctrl c po prostu wysyła sygnał SIGINT, ale jest kilka innych sygnałów, które są nieco bardziej miękkie. http://www.gnu.org/software/libtool/manual/libc/Termination-Signals.html

Myślę, że możesz użyć polecenia kill, aby wysłać inny sygnał. (patrz man zabić, aby uzyskać więcej informacji)

+0

Upps Firas Assad pobił mnie 35 sekundami ... – Johan

+0

Głosowano za niepoprawne informacje, które są nawet sprzeczne z całym pytaniem. Ctrl + C nie wysyła SIGKILL. SIGKILL sprawia, że ​​jądro zabija proces bez wcześniejszego wysłania jakiegokolwiek sygnału do procesu. – ypnos

4

Jeśli kontrolujesz długo działa zdalny proces, można zainstalować obsługi sygnału dla SIGTERM (patrz man signal i man sigaction i wiele SO pytania na ten temat), do czyszczenia ładnie przed umieranie.

To bardzo często.

0

Należy również pamiętać, że w obsłudze sygnału jest to, że jest on traktowany jako przerywacz, ponieważ jest on ograniczony do tego, co wolno w nim robić bez uszkadzania reszty programu. Najlepszą rzeczą, jaką możesz tutaj zrobić, jest ustawienie zmiennej atomic_t "should_quit".