Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[Java] comunicazione tra i processi

Problemi di HTML? Di PHP, ASP, .NET, JSP, Perl, SQL, JavaScript, Visual Basic..?
Vuoi realizzare programmi in C, C++, Java, Ruby o Smalltalk, e non sai da che parte cominciare?
Entra qui e troverai le risposte!

Moderatori: Triumph Of Steel, archimede

[Java] comunicazione tra i processi

Postdi Swalke » 02/12/07 21:43

Ciao a tutti.
Sto facendo un programmino in java che utilizza swing per l'interfaccia grafica. Indipendentemente da swing comunque vorrei chiedervi un parere.

Devo fare in modo che quando il programma viene lanciato, controlla se era già in esecuzione e in tal caso non viene rieseguito (System.exit(0)).

Questa cosa posso ottenerla solo con la comunicazione tra i processi vero?
Pipe ecc.
In ogni caso sapete darmi qualche suggerimento o qualche link che può essermi d'aiuto?

Grazie mille.
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Sponsor
 

Postdi BianConiglio » 03/12/07 08:26

semplicemente checka che non ci sia un precedente PID associato al tuo programma

http://forum.java.sun.com/thread.jspa?t ... ID=1696885 (e' giusto un esempio minimo..indaga nella javadoc)
BianConiglio
Utente Senior
 
Post: 4710
Iscritto il: 26/12/01 01:00
Località: Varese / Lugano

Design Pattern: Singleton

Postdi infinito1971 » 03/12/07 21:01

Ciao Swalke,
io ti consiglierei di usare il pattern Singleton: serve proprio a far sì che vi sia una sola istanza attiva di una determinata classe.
Inoltre, se sei interessato all'argomento dei design pattern, ti consiglio l'ottimo libro di Massimo Bigatti: UML e Design Pattern, ed. Hoepli.

Un saluto,
infinito1971
Questo business è binario: o sei 1 o sei 0, vivo o morto, non esistono secondi classificati!
Avatar utente
infinito1971
Utente Senior
 
Post: 531
Iscritto il: 01/08/02 21:22
Località: Napoli

Postdi Swalke » 03/12/07 23:53

Io non ho bisogno di creare una sola istanza di una classe.
Fare partire due volte il programma genera due processi diversi su due diverse Virtual machine.
Il singleton non centra nulla in questo caso.

BianConiglio, proverò ad seguire le tue indicazioni ed eventualmente mi faccio risentire.

Grazie ad entrambi.
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi zello » 05/12/07 12:47

In win32 di solito si crea un named mutex, se esiste già si esce. Probabilmente il concetto rimane valido, ma java per quanto ne so io non ha molte possibilità di fare inter process communication. Di fatto ti rimangono i files (un processo apre un file marcato deleteOnExit, se lo trova già esistente c'è un altro processo in esecuzione), i sockets (si apre un ServerSocket su una porta ad hoc bindata su 127.0.0.1 [o anche sull'interfaccia esterna, così riesci anche ad avere una sola istanza per rete, però ti esponi]; se il socket è già aperto, il programma è in esecuzione [semmai verifica con uno scambio di messaggi che sia proprio il tuo programma, e non un altro, dietro la porta]) o le pipes (che dovrebbero funzionare anche interprocess, o così è riportato, ma non è assolutamente garantito, e quindi potresti avere qualche sorpresina a runtime).
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Postdi Swalke » 05/12/07 22:19

Il file non volevo usarlo perchè ni sembrava un po' poco elegante.
...in oltre il programma potrebbe essere terminato da taskmanager e il file non verrebbe cancellato credo. Nella documentazion e si parla di "normal termination of the virtual machine"... mha

Restano le pipe su cui mi devo documentare un po e le socket.
No capisco cosa intendi però con :
o anche sull'interfaccia esterna, così riesci anche ad avere una sola istanza per rete, però ti esponi
Avatar utente
Swalke
Hardware Admin
 
Post: 820
Iscritto il: 26/10/01 01:00
Località: Milano

Postdi zello » 06/12/07 18:15

Intendo dire che delle volte zello parla senza fare il boot del cervello. Dimenticatene, e binda su 127.0.0.1 (la cosa di avere una sola istanza per rete è fattibile, ma presuppone l'esistenza di un server apposito su una macchina prestabilita. Mica posso avviare dei ServerSocket su una macchina diversa da quella locale...)
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44

Postdi zello » 06/12/07 18:18

...in oltre il programma potrebbe essere terminato da taskmanager e il file non verrebbe cancellato credo

la cosa la puoi complicare a piacere; non conosco così tanto java per dirti se è possibile, ma con un protocollo del tipo:
- chi crea il file scrive sopra il pid del programma
- se all'esecuzione lo trova esistente, controlla se un programma con tale pid è in esecuzione
- se non lo è, lo sovrascrive con il proprio pid
- altrimenti esce.
Dovresti essere relativamente sicuro (occhio alle race conditions, però).
Il faut être toujours ivre. Tout est là : c'est l'unique question. Pour ne pas sentir l'horrible fardeau du Temps qui brise vos épaules et vous penche vers la terre,il faut vous enivrer sans trêve...
Avatar utente
zello
Moderatore
 
Post: 2351
Iscritto il: 06/05/02 13:44


Torna a Programmazione


Topic correlati a "[Java] comunicazione tra i processi":

web scraping in java
Autore: templare77
Forum: Programmazione
Risposte: 1

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti