PDA

View Full Version : [BASH] esistono i thread??


andrew1988
12-03-2009, 19:45
vorrei creare un programma che m gestisca 2 thread. il problema e' questo: con un thread faccio partire una canzone e con l'altro dopo un po d tempo uccido il processo (mplayer).
L'unico modo che m e' venuto in mente e' creare 2 programmi avviati consecutivamente

#!/bin/bash
mplayer -playlist "/media/DATA/Musica/pippo/list"

#!/bin/bash
sleep 7
killall mplayer

il fatto e' che se li metto nello stesso programma prima d arrivare allo sleep deve terminare il primo comando.. ed e' li che m servirebbero 2 thread..

andrew1988
12-03-2009, 20:29
uff ma xke' sn cosi' inetto nel bash!!! :help:
xke' nn funziona??

#!/bin/bash
$a=sort -R list
mplayer -playlist $a 1> /dev/null

conoscete un buon manuale in rete cosi' se vi scoccio e' x cose + serie?

ma si riuscirebbe a fare le stesse cose in linguaggio C che lo conosco meglio??

dierre
12-03-2009, 20:34
non esiste che io sappia.

http://www.ush.it/2007/01/27/pseudo-threading-with-bash/

andrew1988
12-03-2009, 20:49
dunque la storia del random l'ho risolta con la fantastica opzione -shuffle d mplayer, anche se m piacerebbe sapere come si fa in bash.
che peccato x i thread!! sarebbe stato utilissimo, ma implementare il tutto in C con i pthread? sicuramente si riesce, idee su come procedere?

x i file si usa comodamente un file descriptor, poi come ordinarli random nn ne ho idea, x la sincronizzazione dei thread posso anche farcela, anche se nn so come inviare il comando killall al sistema da C.. e nello stesso modo nn so come avviare mplayer da C...

medicina
13-03-2009, 08:32
vorrei creare un programma che m gestisca 2 thread. il problema e' questo: con un thread faccio partire una canzone e con l'altro dopo un po d tempo uccido il processo (mplayer).
L'unico modo che m e' venuto in mente e' creare 2 programmi avviati consecutivamente

#!/bin/bash
mplayer -playlist "/media/DATA/Musica/pippo/list"

#!/bin/bash
sleep 7
killall mplayer

il fatto e' che se li metto nello stesso programma prima d arrivare allo sleep deve terminare il primo comando.. ed e' li che m servirebbero 2 thread..

mplayer -playlist "/media/DATA/Musica/pippo/list" &
sleep 7
killall mplayer

o, meglio, usi il comando pidof e quindi kill. Perché killall ti chiude tutte le versioni di mplayer che si possano trovare in esecuzione.

Invece di usare il comando kill potresti anche usare la modalità slave di MPlayer e inviargli il comando di uscita quando ti serve.

andrew1988
13-03-2009, 12:54
il problema e' quasi risolto, tranne che per il fatto che quando lo vado a schedulare in cron
#!/bin/bash
ls '/media/DATA/Musica/pippo/'*.mp3 > '/media/DATA/Musica/pippo/'list
gmplayer -playlist "/media/DATA/Musica/pippo/list" -shuffle -slave

anche se specifico che voglio Gmplayer con interfaccia grafica nn me la mostra, insomma funziona il tutto in background, e io vorrei riuscire a fermarlo senza uccidere il processo con kill.. nn e' che si potrebbe ridirezinare l'output su un terminale? da li poi con la funzione -slave d mplayer lo termino.. ho provato "> /dev/tty1" ma nn va nulla..