Portál AbcLinuxu, 14. května 2025 02:15

Dotaz: Ochrana programu před CTRL+C

6.11.2012 17:15 jardA
Ochrana programu před CTRL+C
Přečteno: 562×
Odpovědět | Admin
Ahoj, snazim se neco bastlit v shellu a zjistil jsem, ze program lze kdykoliv prerusit stisknutim kombinace CTRL+C coz je nemile, jelikoz program po sobe nestihne uklidit. Muj dotaz tedy smeruji na tento problem, lze nejak a) zamezit teto kombinaci, b) nastavit co se musi udelat pri stisknuti teto kombinace, c) vase jiná možnost? Díky za pripadnou pomoc.

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

6.11.2012 17:23 Trdlo
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Odpovědět | | Sbalit | Link | Blokovat | Admin
http://hacktux.com/bash/control/c
Řešení 1× (victor8)
6.11.2012 17:59 Kit
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Odpovědět | | Sbalit | Link | Blokovat | Admin
trap
6.11.2012 23:04 Jooky (inactive) | skóre: 39 | blog: Jooky | Bratislava
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
len pre doplnenie:
trap [COMMANDS] [SIGNALS]

This instructs the trap command to catch the listed SIGNALS,
which may be signal names with or without the SIG prefix,
or signal numbers. If a signal is 0 or EXIT,
the COMMANDS are executed when the shell exits. 
^C je z pohladu shellu len jeden zo signalov. Viac: http://tldp.org/LDP/Bash-Beginners-Guide/html/sect_12_02.html
6.11.2012 18:24 NN
Rozbalit Rozbalit vše Re: Ochrana programu pred CTRL+C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Mozna by stacilo to spustit na pozadi..
6.11.2012 23:28 Arnošt Málek | skóre: 17
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Odpovědět | | Sbalit | Link | Blokovat | Admin
Pouzivam trap "" 2 20, takze to sem doplnim, at je tu primo "navod".
7.11.2012 00:36 l4m4
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Když něčemu pošlu SIGINT, tak to chci ukončit. Tudíž se to má korektně, leč neprodleně ukončit.

Když to SIGINT ignoruje, následuje přirozeně SIGKILL, který už to ignorovat nemůže.

Takže jediný výsledek postupu podle tvého návodu bude zabití programu s použitím hrubějšího násilí.
7.11.2012 06:12 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Přesně tak to je. Navíc softy, které záměrně ignorují SIGINT, jsou pěkně otravné :)
7.11.2012 13:48 Arnošt Málek | skóre: 17
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
Mam to tak nastaveno ve skriptu, ktery se pouziva jako interpret ... a funguje to tak jak chci. Jak by to tedy melo byt spravne?
martin-ux avatar 8.11.2012 12:33 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
niekedy je ale dobre, aby to neskoncilo hned, ale malo cas na ukoncenie. nie je problem spravit counter na ^c a po tretom stisknuti skoncit predcasne, ak je user o tom presvedceny.
..when you do things right, people won't be sure you've done anything at all..
martin-ux avatar 8.11.2012 12:46 martin-ux | skóre: 18 | Bratislava
Rozbalit Rozbalit vše Re: Ochrana programu před CTRL+C
este som mohol pre autora prispevku dat kratku uzazku:
#!/bin/sh

SIGINT_TRAP_COUNTER=3

handler_signit() {
        ((SIGINT_TRAP_COUNTER=$SIGINT_TRAP_COUNTER-1));

        if [ $SIGINT_TRAP_COUNTER -lt 1 ]; then
                printf "debug: handler_signit: ending prematurely\n";
                exit 1;
        fi

        printf "debug: handler_signit: doing cleanup ($SIGINT_TRAP_COUNTER)\n";
        sleep 4; # just a fake cleanup time

        exit 0;
}

trap handler_signit SIGINT

while true ; do
        printf "main_loop: looping ...\n";
        sleep 5;
done
takto mas moznost odchytit ^c a davas moznost userovi skoncit ten script, ak to naozaj chce.
..when you do things right, people won't be sure you've done anything at all..

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.