PDA

View Full Version : [C] creazione processi


tecno789
09-01-2012, 20:31
Salve, sto affrontando l'argomento dei processi e delle fork, ma ho notato che quest'ultime non funzionano sotto windows, sbaglio qualcosa oppure questa funzione gira solo sotto linux??

british
09-01-2012, 20:44
Salve, sto affrontando l'argomento dei processi e delle fork, ma ho notato che quest'ultime non funzionano sotto windows, sbaglio qualcosa oppure questa funzione gira solo sotto linux??

fork() è standard UNIX/POSIX. Le cose più vicina in Windows sono la CreateProcess e la CreateThread.

ciao!

tecno789
09-01-2012, 20:47
fork() è standard UNIX/POSIX. Le cose più vicina in Windows sono la CreateProcess e la CreateThread.

ciao!

ok grazie mille come temevo... ma è difficile da riconvertire o hanno lo stesso procedimento?

british
09-01-2012, 21:00
ok grazie mille come temevo... ma è difficile da riconvertire o hanno lo stesso procedimento?

Dipende dai casi, la semantica è un po' diversa.
Il mio consiglio: se usi la fork() perchè stai studiando la fork()... usa la fork()! cioè, sviluppa in Unix.

ciao!

tecno789
09-01-2012, 21:17
Dipende dai casi, la semantica è un po' diversa.
Il mio consiglio: se usi la fork() perchè stai studiando la fork()... usa la fork()! cioè, sviluppa in Unix.

ciao!

certo, già lo faccio, però programmo con entrambi e volevo saperne di più! grazie per le risposte.

WarDuck
10-01-2012, 08:41
Ma meno male che non esiste la fork sotto Windows, è un obbrobbrio.

tecno789
10-01-2012, 12:03
Ma meno male che non esiste la fork sotto Windows, è un obbrobbrio.

:D ahaha ok ok era solo per capire! Grazie

pabloski
10-01-2012, 14:44
Non è vero che è un obbrobrio e createprocess non è molto diversa. L'unica differenza è nella semantica appunto, ma l'implementazione di fork degli unix moderni ( linux, freebsd, ecc... ) è efficiente almeno quanto la createprocess.

Inoltre la fork è molto più semplice da utilizzare e accoppiata all'exec dà molta flessibilità ed estrema facilità d'uso.

Ad esempio una fork sotto unix ti permette di creare un clone del processo corrente ( si, è un'operazione utile in taluni casi ), mentre la createprocess non clona il processo.

Si tratta di due funzioni nate per scopi molti diversi. L'errata convinzione circa la bruttezza di fork è dovuta al fatto che le prime implementazioni copiavano fisicamente tutta la memoria del padre nel processo figlio, perdendo tempo. Oggi si usa il copy-on-write e la memoria viene clonata solo se necessario ( se ad esempio fai fork e poi subito exec, non perderà tempo nel clonare il padre visto che non serve ).

Ad ogni modo, se vuoi ottenere lo stesso risultato su entrambi i sistemi, devi per forza prevedere due distinti procedure nel codice. Puoi usare le direttive di compilazione per compilare selettivamente l'una o l'altra.