Visualizzazione dei risultati da 1 a 5 su 5

Discussione: perl e monitors

  1. #1

    perl e monitors

    Non so se la sezione è giusta, in ogni caso posto il mio problema.
    Ho uno script in Perl che contiene un ciclo: in questo ciclo viene richiamata un programma in C che fa alcune cose (crea cartelle, si connette ad un database, chiama altre procedure di sistema, ecc.ecc). Il problema è che vorrei far partire il ciclo successivo a quello corrente una volta che la chiamata alla procedura C è stata eseguita completamente, altrimenti alcuni dati vengono sovrascritti e "risultato = casino".
    Momentaneamente ho risolto includendo una chiamata "sleep" pari a 2 secondi, più che sufficiente in caso di basso carico del server. Tuttavia come soluzione non mi piace molto (troppo dipendente dal carico del sverer) e preferirei implementare una specie di monitor: è possibile far partire un ciclo esattamente una volta che la chiamata alla procedura esterna in C si è conclusa? In realtà credo che non sia possibile intervenire direttamente all'interno del codice Perl, piuttosto devo implementare qualcosa a livello di sistema operativo. Qualche idea?
    -TOOL-
    It's not enough, i need more, i don't want it, I just need it, to breathe, to feel, to know I'm alive.

  2. #2
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Mi risulta che devi intervenire a livello di codice Perl.
    Il Perl ha varie istruzioni per chiamare eseguibili esterni:
    system, exec, eval, `...` (apici indietro), e forse altre

    Se ricordo bene, system attende il ritorno del controllo, prima di procedere con il resto del programma (e tra l'altro puo` analizzare il codice di ritorno dell'eseguibile chiamato).
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  3. #3
    Effettivamente richiamo le procedura esterne con system, ma sembra proprio che il controllo ritoni al padre prima che il il figlio abbia finito. Il riscontro ce l'ho anche nel log che scrivo sullo standard error.
    Uff...c'è da dire che Perl lo conosco ancora poco e il programma non l'ho scritto io, ma lo sto solo modificando.
    -TOOL-
    It's not enough, i need more, i don't want it, I just need it, to breathe, to feel, to know I'm alive.

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Ce l'hai un manuale da consultare?
    Sotto unix puoi scrivere
    man perlfunc

    Se non va o se hai problemi puoi vedere
    http://www.perldoc.com/perl5.6.1/pod/perl.html
    che dovrebbe avere circa lo stesso contenuto.
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5

    è Lunedì mattina per tutti...

    Beh...ho risolto. Ed era una stupidata: la chiamata alla procedura esterna era, giustamente, impostata con system che infatti aspetta che il controllo venga restituito dal processo figlio al processo padre. Il problema era che la chiamata era nella forma "comando &" e così il processo veniva creato in background e lo script perl continuava il ciclo autonomamente senza aspettare che la chiamata esterna avesse finito le sue computazioni. Semplice...ma il Lunedì mattina certe cose non si notano
    -TOOL-
    It's not enough, i need more, i don't want it, I just need it, to breathe, to feel, to know I'm alive.

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.