Newsgroup: it.comp.programmare.win32
Titolo: "Fork": esiste in Win32?

Ciao!
Volevo sapere se esiste una istruzione simile a "fork" di linux/Unix tra le
API di Win32.
A presto!
--
Alessandro Monopoli
-----------------------------------
Visita il mio sito! : 
http://digilander.iol.it/amonopo/
oppure: 
http://www.alemonopoli.com
E già che sei lì, votalo!!
-----------------------------------

 writes:
AM> Ciao!
AM> Volevo sapere se esiste una istruzione simile a "fork" di linux/Unix tra le
AM> API di Win32.
Non c'è nel supporto POSIX ?  Se non è indispensabile la copia dello
spazio di indirizzamento può esserti utile la CreateThread(), oppure
in fase di avviamento ricuperi le informazioni sul file usato per il
processo corrente e le usi per una CreateProcess().
\begin{echelon}
terrorist Albanian World Trade Center domestic disruption SEAL Team 6
security counter-intelligence SDI Saddam Hussein NSA Soviet
assassination Delta Force plutonium quiche
\end{echelon}
\begin{avviso}
 
Attenzione: Leggersi lo header riguardo al mio e-mail!
Warning: read header for infos about my e-mail.
\end{avviso}
+----------------------------------------------------------------+
| Gian Uberto Lauri * "So, are you working on fixing that bug    |
| 
sa...@eng.it
      *  *now* or leaving it until later ?" - YES  |
+----------------------------------------------------------------+

A presto!
No, esiste la famiglia di funzioni _spawn e le Api
CreateProcess,CreateProcessAsUser... che "sostituiscono" fork+exec, ma sono
ben altra cosa.
Ciao Paolo.
-- 
Posted from [212.210.39.5] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ben altra cosa.
esattamente.. fork esiste solo in winNT/2k e limitatamente al subsystem
POSIX.. ergo x il subsys win32 e' necessario emularne il comportamento
avendo ben presente che alcune limitazioni sono "sostanzialmente"
insormontabili e dovute alla differente implementazione del S.O. stesso (MM,
process manager, etc...)..
cmq come hai giustamente fatto notare nella maggior parte delle volte fork
e' seguito da exec (x detach,spawn,etc) .. quindi nella maggior parte dei
casi rientra nella semantica della famigia di API CreateXXX... x le altre
casistiche le cose son assai + difficili:
il problema non sarebbe tanto il replicare l'address space o l'ereditaieta'
degli handles cosa di per se' fattibile (Nt/2k gia' lo contemplano a livello
di NCI.. NtCreateFile SectionHandle==NULL + InheritObjectTable==TRUE).. il
problema resta la copia dell'intero "enviroment", del contesto di
esecuzione, heaps, stack, etc, etc.. che non sono previste perche' diverso
e' il paradigma stesso di multitasking fra i due S.O. (e personalmente
preferisco win2k)
non so.. ma laddove si richiede l'uso di fork x il multitasking, od exec per
"rimpiazzare" l'image del "processo" con un'altra.. imho forse e' il caso di
riformularsi la domanda se sia davvero auspicabile replicare il multitasking
*nix sotto NT, o non sarebbe meglio ripensarlo in termini di multithreading
al limite utilizzando i nuovi obj  jobs,etc..
Se proprio le necessita' impongono di essere POSIX compliant.. puoi
ricorrere a qualche toolkit come U/WIN, MKS Toolkit, o cygwin (quest'ultimo
GPL.. ma decisamente + limitato): di questi ho avuto modo di scontrarmi solo
con cygwin e con alterni risultati.
My 2 cents,
 WalkerBoh

> Se proprio le necessita' impongono di essere POSIX compliant..
No,no, volevo solo creare un processo figlio come in Unix, niente di
particolare.
E' possibile con Win9x?
grazie delle risposte!


le API di Win32.
http://sources.redhat.com/cygwin
http://sources.redhat.com/cygwin/faq/faq_4.html#SEC65
http://sources.redhat.com/cygwin/cygwin-api/std-posix.html
è un port quasi completo dell'API Unix per Windows
(comunque come ti hanno già detto in Windows NT c'è già il sottosistema 
posix che si occupa di queste cose)
al massimo cercati i sorgenti di Perl per Windows, sembra che usino un 
fork() un po' più furbo di questo

E' possibile con Win9x?
Windows non ha alcun concetto di processi "figli".
I processi non sono mai in alcuna relazione tra essi.
Se ti interessa semplicemente lanciare una seconda applicazione dalla
prima, lo puoi fare tramite le API CreateProcess.
--
Andrea Laforgia (ICQ 87230455)
http://www.geocities.com/AndreaLaforgia
"ci sono tre tipi di persone nel mondo : quelli che
 sono bravi in matematica e quelli che non lo sono."

 prima, lo puoi fare tramite le API CreateProcess.
allora cosa è una "struttura processi"?
semplicemente un insieme di processi creati con CreateProcess()?
(dal context-menu del taskmanager di win2000 sez. processi)
--
ciao
..::[xaero]::..

(dal context-menu del taskmanager di win2000 sez. processi)
Non uso ancora Win2000 ma per ammissione stessa di Richter, Win32 sino
a NT 4.0 non ha una struttura padre/figlio dei processi.


> prima, lo puoi fare tramite le API CreateProcess.
x> allora cosa è una "struttura processi"?
x> semplicemente un insieme di processi creati con CreateProcess()?
x> (dal context-menu del taskmanager di win2000 sez. processi)
Credo che Andrea Laforga(?) intendesse questo :
Nella semantica Unix (che credo sia quella Posix) se processo A lancia
processo  B  e processo  A  muore,  allora  viene inviato  un  segnale
(SIGHUP) anche a B che muore (a meno che non trappi SIGHUP).
Sotto  Windows no. Per  cui se  da cmd.exe  fai "start  notepad.exe" e
chiudi cmd.exe, notepad non muore.
\begin{echelon}
assassination FBI FSF South Africa Ortega Treasury security kibo North
Korea NORAD Legion of Doom CIA NSA cracking Qaddafi


Sotto  Windows no.
Esatto. 


> Credo che Andrea Laforg a(?) intendesse questo :
AL>                         ^
AL>                         i 
AL> ;)
Scusami e grazie, la mia si era montata la testa ed ha detto che andava
in un libro di matematica, capitolo dei numeri complessi...
\begin{echelon}
bomb fissionable FBI nuclear colonel Mossad FSF Waco, Texas
counter-intelligence explosion security Semtex munitions arrangements
Saddam Hussein


chiudi cmd.exe, notepad non muore.
l'esempio peggiore che potessi fare :)
start DEVE funzionare cosě, č fatto apposta...
-- 
-----BEGIN GEEK CODE BLOCK-----
Version 3.1 (with proprietary extensions)
Comments: waiting for version 4.0 ;)
GE/M/S/O d- s:--- !a C++++()>$ UL P+>+++ L+>++ e w++>$ N++ o-- K- W++ O? 
M? V? PS++ PE- Y+>+++ PGP++ t+ 5? X++(+) R tv--  b++>++++ DI++ D++ G-- e 
h! !r xy**
------END GEEK CODE BLOCK------

start DEVE funzionare cosě, č fatto apposta...
In ogni caso il senso era chiaro : sotto Windows non si ha il normale
comportamento padre/figlio.


> chiudi cmd.exe, notepad non muore.
K:H> l'esempio peggiore che potessi fare :)
K:H> start DEVE funzionare cosě, č fatto apposta...
Scusa, ma Unix lo conosci ?
\begin{echelon}
Marxist quiche strategic nuclear FSF Delta Force Uzi SEAL Team 6
Qaddafi FBI jihad cryptographic genetic Nazi Legion of Doom
\end{echelon}
\begin{avviso}
 
Attenzione: Leggersi lo header riguardo al mio e-mail!
Warning: read header for infos about my e-mail.
\end{avviso}
--


Scusa, ma Unix lo conosci ?
sě, quando chiudi un programma vengono chiusi tutti quelli che ha 
avviato... ma se cosě fosse anche in Windows, ebbene, start.exe servirebbe 
a creare un nuovo "albero" di processi, non figlio di quello corrente


> Scusa, ma Unix lo conosci ?
Bon, la risposta che avevi dato lasciava dei dubbi...
K:H> sě, quando chiudi un programma vengono chiusi tutti quelli che ha 
K:H> avviato... 
Tutti quelli che non si sono "sganciati". 
K:H> ma se cosě fosse anche in Windows, ebbene, start.exe servirebbe 
K:H> a creare un nuovo "albero" di processi, non figlio di quello corrente
Il processo non  č un figlio. E' un'altro processo  di cui il processo
avviante puň  strafregarsene (sotto Windows  non _deve_ fare  una wait
sul processo figlio, in Unix si o si lascia uno zombie in giro).
\begin{echelon}
Qaddafi Semtex Clinton cracking World Trade Center assassination
Mossad spy Nazi explosion Marxist Treasury FSF Uzi BATF
