View Single Post
Old 26-01-2008, 19:25   #2
grillosoft
Senior Member
 
L'Avatar di grillosoft
 
Iscritto dal: Jul 2006
Messaggi: 466
Quote:
Originariamente inviato da luppolo Guarda i messaggi
ho un problema singolare....
devo lanciare in un dato ordine 5 processi in background....
uno di loro (il 3° per la precisione) controlla lo stdin e alla pressione di un tasto avvia determinate funzioni.

Il problema è che quando lancio in backgraund un processo, con il comando
./processoX &
a volte mi ritorna immediatamente la shell, altre volte invece non ritorna immediatamente la shell, ma occorre dare un invio...
è come se il processo non fosse ancora in bg, ma lo diventasse alla pressione di un tasto.

solitamente questo comportamento non mi crea problemi, ma al lancio del 3° processo si!!
xchè se ritorna immediatamente la shell tutto fila liscio come l'olio, ma se sono costretto a premere il tasto invio, il processo recepisce quell'invio come un tasto premuto e fa cose che non dovrebbe fare...

mi spete spiegare perchè accade???
e soprattutto come impedire che accada??


Nel caso non fossi stato sufficientemente chiaro allego un esempio:

-Caso ERRATO:
Codice:
mercedes:~/privato/test> ./processo3.exe &
[4] 17443
mercedes:~/privato/test> avvio processo
caricamento in corso
caricamento eseguito correttamente
 <---- qui rimango bloccato e se premo invio succede questo...
Codice:
[4]  + Suspended (tty input)         ./processo3.exe
mercedes:~/privato/test>
vedete?? ritorno si alla shell ma intanto il processo è 'suspended' e ha eseguito il codice

-Caso CORRETTO:

in questo caso invece mi ritorna direttamente la shell e tutto va come deve andare....
l'unica differenza che ho notato io è che nel primo caso dopo il lancio del processo viene restituito:
- il PID,
- poi la Shell,
- poi le frasi di debug e rimane in sospeso....

nel secondo caso viene restituito
- il PID,
- poi le frasi di debug
- poi la Shell,

grazie MILLE!!!
prova anziche eseguire i comandi con ./ prova con sh e vedi se il problema persiste
grillosoft è offline   Rispondi citando il messaggio o parte di esso