esecuzione di servizi per un middleware

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
geetwo
Linux 0.x
Linux 0.x
Messaggi: 42
Iscritto il: mer 17 ago 2005, 0:00
Località: Napoli

esecuzione di servizi per un middleware

Messaggio da geetwo »

ciao ragazzi, ho bisogno del vostro aiuto (cercherò di essere breve e chiaro, sarà una bella impresa...)

sto sviluppando una tesi relativa all'implementazione di un middleware. ho bisogno di far partire una serie di daemons (con delle interdipendenze tra di loro). In particolare si tratta di far partire 2 daemons di CORBA (naming services) + altri 5 daemons fatti da altri ragazzi del mio laboratorio.

attualmente è stato realizzato uno script che attiva tutti i demoni correttamente, si verifica uno strano fenomeno:
lanciando "ps aux" da una macchina che ha Mandrake si hanno tanti processi quanti sono i daemons (7 in totale), mentre con Slackware (con lo stesso script) l'esecuzione dei 5 daemons fa partire più processi di CORBA (oltre ai 2 iniziali) per un totale di 24 processi. :!:

1) sapreste dirmi come è possibile che con slackware ci sia questo spawning di processi? mentre con altre distro no?

Anche se con questo script si generano comportamenti differenti tra le varie distro, il middleware e le applicazioni relative funzionano correttamente.
Il problema è che adesso mi è stato chiesto di integrare questo script nel codice di una mia applicazione utilizzando le primitive exec().
quello che mi succede è che il codice funziona bene su Mandrake (tutti i servizi partono correttamente e sono generati 7 processi) mentre per slackware l'ultimo servizio crasha come se qualcosa fosse andato storto prima.

le ho provate un po' tutte: far partire slackware con kernel 2.4, provando la distro live di Mandriva......nessun risultato positivo... :(

2) non voglio entrare nei dettagli implementativi del middleware e non vi chiedo certo di riscrivermi il codice (non avrebbe senso), vorrei solo sapere se qualcuno ha idea di come possa essere giustificata questa differenza di comportamenti e come si possa fare in modo che sulla macchina che ha Slackware siano generati tanti processi quanti sono i servizi

grazie per la pazienza e per la disponibilità ;)

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

ma i processi come li lanci?

geetwo
Linux 0.x
Linux 0.x
Messaggi: 42
Iscritto il: mer 17 ago 2005, 0:00
Località: Napoli

Messaggio da geetwo »

nel mio programma in c++ li lancio tramite le primitive exec().

il problema è che la differenza nella generazione dei processi (nell'output di ps aux) tra le 2 distribuzioni è a monte (cioè già con quello script della shell).... e questo fa sì che il mio programma in c++ funzioni su Mandrake ma non su Slackware

mi auguro che mi possiate dare una mano perchè sono davvero bloccato....fatemi laureare ;)

PS: lo script della shell si preoccupa solo di lanciare i demoni tramite comandi del tipo
"pathToDaemon/daemon -arg1 -arg2 ... -argN"
PPS rimango online per qualsiasi chiarimento

Avatar utente
supertoms
Linux 0.x
Linux 0.x
Messaggi: 89
Iscritto il: mer 22 giu 2005, 0:00
Località: Lissone Monza Italy
Contatta:

Messaggio da supertoms »

occhio che prima delle exec devi fare il fork dei processi e creare un processo per ogni exec.
al limite posta lo script e dai un occhio sulle due distro al risultato di pstree.

geetwo
Linux 0.x
Linux 0.x
Messaggi: 42
Iscritto il: mer 17 ago 2005, 0:00
Località: Napoli

Messaggio da geetwo »

la parte dello script della shell che lancia i servizi è questa:

Codice: Seleziona tutto

case "$1" in
  dns)
	${TAO_ROOT}/orbsvcs/Naming_Service/Naming_Service \
		-ORBEndPoint iiop://${NAMING_SERVICE_ADDR} \
		-p ${PID_FILE_NAME} &
	echo "Starting Intra Domain Naming Service...done!"
	sleep 1
  ;;

  tupFac)
	./tupleFac/factoryd \
		-ORBInitRef DomainNameService=corbaloc:iiop:${NAMING_SERVICE_ADDR}/NameService \
		-ORBEndPoint uiop:// \
		-LogFile ${DEBUG_FILE_TUPLE_FACTORY} \
		-TupleSpace ${PERSISTENT_TUPLE_DIRECTORY} \
		-PidFile ${PID_TF_FILE_NAME} &
	sleep 2
  ;;

  tupMan)
	./tupleMan/tupleMand \
		-ORBInitRef DomainNameService=corbaloc:iiop:${NAMING_SERVICE_ADDR}/NameService \
		-ORBEndPoint uiop:// \
		-LogFile ${DEBUG_FILE_TUPLE_MANAGER} \
		-TimerGarbageCollector ${TIMER_GARBAGE_COLLECTOR} \
		-TupleSpaceDimension ${TUPLE_SPACE_DIMENSION} \
		-PidFile ${PID_TM_FILE_NAME} &
	sleep 2
  ;;

  devMan)
	./deviceMan/deviceMand \
		-ORBInitRef DomainNameService=corbaloc:iiop:${NAMING_SERVICE_ADDR}/NameService \
		-ORBInitRef ExtraDomainNameService=corbaloc:iiop:${EXTRA_NAMING_SERVICE_ADDR}/NameService \
		-ORBEndPoint uiop:// \
		-LogFile ${DEBUG_FILE_DEVICE_MANAGER} \
		-DeviceList ${DEVICE_LIST_FILE_DEV_MAN} \
		-PidFile ${PID_DM_FILE_NAME} &
	sleep 2
  ;;

  tupDis)
	./tupleDisp/tupleDispd \
		-ORBInitRef DomainNameService=corbaloc:iiop:${NAMING_SERVICE_ADDR}/NameService \
		-ORBInitRef ExtraDomainNameService=corbaloc:iiop:${EXTRA_NAMING_SERVICE_ADDR}/NameService \
		-ORBEndPoint uiop:// \
		-LogFile ${DEBUG_FILE_TUPLE_DISPATCHER} \
		-DomainId ${DOMAIN} \
		-MediatorList ${MEDIATOR_LIST_FILE_TUP_DIS} \
		-PidFile ${PID_TD_FILE_NAME} &
	sleep 2

  ;;

  mwBrid)
	./mwBridge/mwBridged \
		-ORBInitRef DomainNameService=corbaloc:iiop:${NAMING_SERVICE_ADDR}/NameService \
		-ORBEndPoint uiop:// \
		-LogFile ${DEBUG_FILE_MW_BRIDGE} \
		-mwBridgePort ${BRIDGE_PORT} \
		-PotentialServerNumber ${POTENTIAL_SERVER_NUMBER} \
		-PidFile ${PID_BR_FILE_NAME} &
  ;;

  all)
         $0 dns && $0 tupFac && $0 tupMan && $0 devMan && $0 tupDis && $0 mwBrid
  ;;

  *)
         echo "Usage: $0 { dns | tupFac | tupMan | devMan | tupDis | mwBrid | all }"
         exit 1
  ;;
esac

exit 0
gli "sleep" che vedi sono solo una soluzione temporanea per evitare che l'ordine di avvio non sia quello prestabilito [nel programma in C++ devo eliminare gli "sleep" implementando dei meccanismi di sincronizzazione tra processi)]

il problema sta proprio in questa diversa generazione di processi inattesi tra le 2 distro

PS nel .cpp che ho fatto ogni exec() è preceduta dalle fork

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

non so dirti quale sia la soluzione...ma fossi in te proverei questa parte dello script pezzo per pezzo, per vedere quanti demoni lancia sulla tua slack ogni singola parte del costrutto case (approccio top-down :wink: )

Rispondi