View Full Version : Quale tecnologia usare?
IngegnerCane
27-01-2009, 15:43
Ciao a tutti, ho bisogno di un aiuto. Devo fare un'applicazione client-server in cui un'utente possa far partire un'esecuzione composta da una sequenza prestabilita di programmi in fila, ma quando vogliono sia lui che gli eventuali amministratori dell'applicazione devono poter interrompere questa sequenza.
Faccio un esempio per far capire meglio: l'utente dovrà dare un file di input e cliccare sul pulsante di avvio e l'applicazione dovrà passare l'input ad un programma A che genera un output;questo output verrà dato come input ad un programma B e così via.
Il passaggio dei file ed il lancio dei programmi non dovrebbe essere un problema; solo non so come riuscire a memorizzare il processo che è in esecuzione quando è stato lanciato un programma per poterlo poi interrompere se così richiesto dall'utente.
Avevo pensato di farla tramite j2EE ma non riesco a salvare da nessuna parte un identificatore del processo lanciato, nemmeno nel database in quanto non è serializzabile. Avete per caso consigli su altre eventuali tecnologie che possano favorire applicazioni di questo genere?
Ogni processo e' identificato da un PID, un Process IDentifier, che alla fine e' un valore numerico, in praticamente tutti i sistemi operativi.
Potresti tenere traccia dei processi mediante il loro PID.
PS: Ho un vecchio amico che si chiama Cane (di cognome), e che di mestiere e' proprio l'ingegnere.
Se sei tu, ti saluto. Se non sei tu ti saluto lo stesso.
IngegnerCane
28-01-2009, 10:05
Ma come faccio ad ottenere questo PiD? Perchè quando faccio l'esecuzione con la Runtime.getRuntime().exec(comando) mi ritorna un oggetto di tipo Process e non trovo un metodo per recuperare il suo PID..Sennò esiste un altro comando per lanciare un programma e tener traccia del PID?
Ma come faccio ad ottenere questo PiD? Perchè quando faccio l'esecuzione con la Runtime.getRuntime().exec(comando) mi ritorna un oggetto di tipo Process e non trovo un metodo per recuperare il suo PID..Sennò esiste un altro comando per lanciare un programma e tener traccia del PID?
Dipende dal sistema operativo e dal linguaggio utilizzato (che dovrebbe essere fra parentesi nel titolo del thread).
PS: Ho un vecchio amico che si chiama Cane (di cognome), e che di mestiere e' proprio l'ingegnere.
Se sei tu, ti saluto. Se non sei tu ti saluto lo stesso. ehm... no guarda, non credo proprio che sia lui :asd: :asd: :asd:
Avete per caso consigli su altre eventuali tecnologie che possano favorire applicazioni di questo genere? si, bash :fagiano:
in bash si tratta di un compito veramente banale, dovresti banalmente mettere tutti i processi in pipe e lanciarli senza scrivere nessun programma (per interrompere l'esecuzione ti basterebbe premere Ctrl+C o Ctrl+Z se ricordo bene).
banryu79
28-01-2009, 11:05
Ma come faccio ad ottenere questo PiD? Perchè quando faccio l'esecuzione con la Runtime.getRuntime().exec(comando) mi ritorna un oggetto di tipo Process e non trovo un metodo per recuperare il suo PID..Sennò esiste un altro comando per lanciare un programma e tener traccia del PID?
Stai usando Java come linguaggio.
In questo caso il PID del processo potresti ottenerlo in questo modo:
1) lancia il tuo applicativo specificando una custom property (la puoi aggiungere da riga di comando, o se stai sviluppando in un IDE come NetBeans nella pagina delle proprietà del progetto, nella scheda "Run", nel textField "VM Option" aggiungi la stringa in grassetto):
exec java -Dpid=$$ -jar /Applications/myApp.jar
A questo punto nel codice basta una:
System.getProperty("pid");
Ci sono altri modi, se questo non dovesse funzionare; consulta questi link:
- How a Java Application Can Discover its Process ID (PID) (http://blog.igorminar.com/2007/03/how-java-application-can-discover-its.html)
- How can I start a Java process and retain its process id? (http://blog.spikesource.com/javaprocessid.htm)
- Get the PID (http://www.rgagnon.com/javadetails/java-0467.html)
- Retrieving a VM’s PID (and more info) through Java (http://chaoticjava.com/posts/retrieving-a-vms-pid-and-more-info-through-java/)
^TiGeRShArK^
28-01-2009, 11:23
e una volta avuto il PID basta lanciare un kill o un kill -9 per essere sicuri se sei sotto linux..
se sei sotto windows invece facendolo in C# è una cavolata così ad occhio...
IngegnerCane
28-01-2009, 11:49
Stai usando Java come linguaggio.
In questo caso il PID del processo potresti ottenerlo in questo modo:
1) lancia il tuo applicativo specificando una custom property (la puoi aggiungere da riga di comando, o se stai sviluppando in un IDE come NetBeans nella pagina delle proprietà del progetto, nella scheda "Run", nel textField "VM Option" aggiungi la stringa in grassetto):
exec java -Dpid=$$ -jar /Applications/myApp.jar
A questo punto nel codice basta una:
System.getProperty("pid");
Il problema è che questo modo mi sembra vada bene solo se verrà lanciato un solo programma,ma nel caso mio si tratta di un applicazione client-server con più client che possono lanciare più programmi e io volevo tenere traccia del pid di ogni processo lanciato.
Il sistema operativo usato è windows.
banryu79
28-01-2009, 11:54
Il problema è che questo modo mi sembra vada bene solo se verrà lanciato un solo programma,ma nel caso mio si tratta di un applicazione client-server con più client che possono lanciare più programmi e io volevo tenere traccia del pid di ogni processo lanciato.
Il sistema operativo usato è windows.
Prova a guardare gli altri link.
Tra le alternative opterei per l'uso di JNI.
Sempre che appunto tu non possa cavartela in maniera più semplice, come ti hanno suggerito sopra.
IngegnerCane
28-01-2009, 13:13
Ma secondo voi se utilizzo invece che la J2EE i web services,mi può facilitare nel poter lanciare sequenzialmente questi programmi e poterli interrompere quando voglio?
^TiGeRShArK^
28-01-2009, 14:43
visto che sei su windows...
http://msdn.microsoft.com/en-us/library/system.diagnostics.process_members.aspx
Ma secondo voi se utilizzo invece che la J2EE i web services,mi può facilitare nel poter lanciare sequenzialmente questi programmi e poterli interrompere quando voglio? non ho ancora capito perché non puoi scrivere qualche riga di C o di C++ anziché tutti sti ammassi di tecnologia di Java e .NET :fagiano:
IngegnerCane
28-01-2009, 15:39
non ho ancora capito perché non puoi scrivere qualche riga di C o di C++ anziché tutti sti ammassi di tecnologia di Java e .NET :fagiano:
Ho provato ma su windows non riesco a scrivere il giusto codice c/c++ per lanciare un processo e recuperare il suo id,sarà che ormai è tanto ke nn lo uso..:muro: :muro: potete darmi un aiutino?
Ho provato ma su windows non riesco a scrivere il giusto codice c/c++ per lanciare un processo e recuperare il suo id,sarà che ormai è tanto ke nn lo uso..:muro: :muro: potete darmi un aiutino? hai usato questa?
http://msdn.microsoft.com/en-us/library/ms682425.aspx
il PID viene restituito nella struttura PROCESS_INFORMATION, membro dwProcessId; per attendere che un processo termini prima di far partire il successivo usa WaitForSingleObject sull'HANDLE del processo (membro hProcess della stessa struttura):
http://msdn.microsoft.com/en-us/library/ms687032.aspx
per terminare prematuramente un processo usa TerminateProcess:
http://msdn.microsoft.com/en-us/library/ms686714.aspx
ma per quelli con interfaccia grafica sarebbe meglio inviare WM_QUIT.
ricordati di chiudere gli HANDLE con CloseHandle quando non li usi piu:
http://msdn.microsoft.com/en-us/library/ms724211(VS.85).aspx
anche quelli dei thread primari (membro hThread della struttura).
scrivi del codice e vediamo cosa non funziona :)
^TiGeRShArK^
28-01-2009, 15:50
hai usato questa?
http://msdn.microsoft.com/en-us/library/ms682425.aspx
il PID viene restituito nella struttura PROCESS_INFORMATION, membro dwProcessId; per attendere che un processo termini prima di far partire il successivo usa WaitForSingleObject sull'HANDLE del processo (membro hProcess della stessa struttura):
http://msdn.microsoft.com/en-us/library/ms687032.aspx
per terminare prematuramente un processo usa TerminateProcess:
http://msdn.microsoft.com/en-us/library/ms686714.aspx
ma per quelli con interfaccia grafica sarebbe meglio inviare WM_QUIT.
ricordati di chiudere gli HANDLE con CloseHandle quando non li usi piu:
http://msdn.microsoft.com/en-us/library/ms724211(VS.85).aspx
anche quelli dei thread primari (membro hThread della struttura).
scrivi del codice e vediamo cosa non funziona :)
perchè deve spararsi sulle balle se con il C# non ci mette niente a fare tutto? :fagiano:
IngegnerCane
28-01-2009, 15:54
perchè deve spararsi sulle balle se con il C# non ci mette niente a fare tutto? :fagiano:
Il fatto è ke il C# non l'ho mai usato e quindi dovrei iniziare a impararmelo, ed inoltre ho già una gran parte di lavoro del progetto ke devo fare (jsp,servlet,EJB) già fatti in java. Per questo cercavo se possibile di fare tutto in java o tutt'al più in c/c++ inserendolo grazie a JNI..
banryu79
28-01-2009, 16:04
...ed inoltre ho già una gran parte di lavoro del progetto ke devo fare (jsp,servlet,EJB) già fatti in java. Per questo cercavo se possibile di fare tutto in java o tutt'al più in c/c++ inserendolo grazie a JNI..
Guarda il terzo link che ti avevo postato, quello intitolato Get the PID, c'è tutta la soluzione interfacciata in JNI da scaricare.
Con quel materiale e un po' di studio e prove dovresti cavartela facile (il codice in se è minimale, il tempo lo spendi in funzione della tua conoscenza di JNI).
^TiGeRShArK^
28-01-2009, 16:30
Guarda il terzo link che ti avevo postato, quello intitolato Get the PID, c'è tutta la soluzione interfacciata in JNI da scaricare.
Con quel materiale e un po' di studio e prove dovresti cavartela facile (il codice in se è minimale, il tempo lo spendi in funzione della tua conoscenza di JNI).
infatti... basta quello se vuole usare java.
Il fatto è ke il C# non l'ho mai usato e quindi dovrei iniziare a impararmelo, ed inoltre ho già una gran parte di lavoro del progetto ke devo fare (jsp,servlet,EJB) già fatti in java. Per questo cercavo se possibile di fare tutto in java o tutt'al più in c/c++ inserendolo grazie a JNI..
scusa... non avevi detto che dovevi fare un'applicazione client/server? :mbe:
e che c'entrano jsp, servlet ed EJB con un'applicazione client/server? :mbe:
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.