Visualizzazione dei risultati da 1 a 9 su 9

Discussione: fermare script perl

  1. #1

    fermare script perl

    ho lanciato questo script sul mio host tramite un cgi da web:
    codice:
    #!/usr/bin/perl
    
    # Autoflush (per le stampe durante l'esecuzione
    # in un eventuale file di log).
    
    $| = 1;
    $k = 0;
    
    while (1) {
       $k ++;
       &scrivi();
       # Qui metti le tue operazioni periodiche. 
       sleep( 5 );
    }
    
    sub scrivi {
    
       $data = time;
       open(CIAO,">>time.txt");
       print CIAO "$k --> $data\n";
       close(CIAO);
    
    }
    come fermo il suddetto script?

    grazie

  2. #2
    Che ne dici di un:
    until (-e "stop.txt") {
    $k ++;
    &scrivi();
    # Qui metti le tue operazioni periodiche.
    sleep( 5 );
    }

    In pratica esegue il ciclo fino a quando nella stessa cartella non trova un file che si chiama "stop.txt".
    Come soluzione, non è elegamente.
    Non penso tu possa usare il CTRL+C .
    ...

  3. #3
    Originariamente inviato da LordSaga640
    Come soluzione, non è elegamente.
    invece lo è!

    però dato che sto a digiuno di linux dovrei sapere quel'è il pid dello script in esecuzione e come killarlo ..

    grazie Lord

  4. #4
    mi è venuto un dubbio, non è che:

    codice:
    until (-e "stop.txt") { 
    
    }
    impegna troppo il disco fisso?

  5. #5
    no... l'impegno è minimo.

    ma a che ti serve il PID del processo con il sistema suggerito da Lordsaga ?

    comunque il PID del processo con Linux lo acquisisci con:

    $ps = `ps -x | grep "<nomescript>"`;

    $ps =~ /(\d+)\s/;
    $pid = $1;
    Marco Allegretti
    shishii@tiscalinet.it
    Lang: PERL, PHP, SQL.
    Linux user n° 268623 Fedora Core 10, Fedora Core 6, Debian Sarge on mips

  6. #6
    come ha detto shishii l'impegno è minimo.
    Pensa alle migliaia di operazioni che fa il sistema operativo in continuazione sull'HD. Controllare se è presente o meno un file ogni 5-6 secondi non impegna affatto l'HDD.

    Pensa ai programmi tipo E-Mule che usano l'HD in maniera massiccia.

    ciao
    ...

  7. #7
    grazie mille a tutti e due.

    io comunque intendevo il controllare l'esistenza dei un file su disco mille volte al secondo, e non ogni 5-6 secs...

    ciao!

  8. #8
    Originariamente inviato da Claudio Vituzzi
    grazie mille a tutti e due.

    io comunque intendevo il controllare l'esistenza dei un file su disco mille volte al secondo, e non ogni 5-6 secs...

    ciao!
    Asd...
    Ma perchè devi farlo mille volte al secondo.
    Puoi anche seguire il ciclo mille volte ma controllare se esiste il file ogni 10 secondi.

    Forse ti sarà utile questa libreria:

    package Cycle; # Fornisce alcune funzione per l'esecuzione di sub a tempi determinati.
    use strict;
    use Time::HiRes;
    # Ad esempio se vogliamo eseguire una funzione solo 3 secondo dopo l'ultima volta che è stata eseguita
    # allora si userà questa funzione.

    # Le funzioni che fanno uso di questa libreria non contano molto
    # sul tempo ma la sfruttano solo per limitare il carico della CPU.
    sub new {
    my ($package, $cycle)=@_;
    my $timer=bless({},$package);
    $timer->{last}=0;
    $timer->{every}=$cycle;
    return $timer;
    }
    sub check {
    my $timer=shift;
    return undef if Time::HiRes::time()-$timer->{'last'}<$timer->{every};
    $timer->{'last'}=Time::HiRes::time();
    return 1;
    }

    1;
    In pratica crei un nuovo oggetto:
    my $oggetto=Cycle->new(0.1); # L'argomento sono i secondi.
    # Il tempo in secondi è quello che ti serve per specificare ogni quanto fare il controllo
    if ($oggetto->check) {
    print "posso fare ora il controllo\n";
    [controllo]
    }

    Questa libreria l'ho scritta io e mi serve appunto per eseguire del codice all'interno di alcuni blocchi, in modo limitato.
    Anche io infatti avevo cicli che si ripetono molto, ma alcuni controlli li limiti a 3 4 volte al secondo, oppure una volta ogni 20 secondi.

    Nel tuo caso userei questo metodo controllando se il file esiste, una volta ogni 3-4 secondi.

    E' brutto?
    ...

  9. #9
    Originariamente inviato da LordSaga640
    E' brutto?
    è una favola,

    Grazie!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.