Visualizzazione dei risultati da 1 a 9 su 9
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117

    [C/C++ - Linux] Fork in un thread

    Salve! Sto programmando in C/C++ per Linux e sto realizzando un'applicazione che, ahimè, credo che purtroppo dovrà utilizzare fork e thread insieme. Dico "ahimè" e "purtroppo", in quanto da una piccola ricerca per la rete ho letto che se si fa una fork all'interno di un processo con più thread si possono avere conseguenze spiacevoli, o comunque, è un po' sconsigliato.
    Ho purtroppo la necessità di usare delle fork, in quanto all'interno dei nuovi processi dovrò fare delle exec. Mi risulta inoltre impossibile, purtroppo, spostare la creazione dei nuovi processi prima di quella del thread.

    Volevo sapere dalla vostra esperienza se è davvero sconsigliabile fare cose di questo tipo e, nel caso, se ci sono accorgimenti da prendere. Credo infatti che nel caso in cui un nuovo processo faccia un exec, la cosa non sia così grave, ma un parere da chi ha più esperienza fa sempre comodo.

    Grazie.

  2. #2
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Ho purtroppo la necessità di usare delle fork, in quanto all'interno dei nuovi processi dovrò fare delle exec.
    Ma exec di cosa? Dello stesso processo? Di altri processi?
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117
    L'exec di altri processi che mi servono per l'esecuzione dei compiti che devo realizzare con la mia applicazione.

  4. #4
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Perché non li avvii in qualche thread specifico allora? Anche perché la fork duplica il processo stesso, non lancia nuovi programmi.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    466
    Dico "ahimè" e "purtroppo", in quanto da una piccola ricerca per la rete ho letto che se si fa una fork all'interno di un processo con più thread si possono avere conseguenze spiacevoli, o comunque, è un po' sconsigliato.
    Credo che la pthread_atfork dovrebbe venirti incontro.. Credo, perchè non l'ho mai usata, (mai avuto la necessità )

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117
    Originariamente inviato da shodan
    Perché non li avvii in qualche thread specifico allora? Anche perché la fork duplica il processo stesso, non lancia nuovi programmi.
    Che io sappia (magari mi sbaglio), quando si fa un'exec viene coinvolto TUTTO il processo, quindi tutti i thread che esso comprende. Se faccio una exec in un thread, sostituisco tutto il processo con quel thread, ovvero mi perdo gli altri thread (non l'ho provato, ma a livello teorico credo che sia così).

    Originariamente inviato da simo_85
    Credo che la pthread_atfork dovrebbe venirti incontro.. Credo, perchè non l'ho mai usata, (mai avuto la necessità )
    Avevo letto anche io di questa funzione, ma non ho trovato molte info ed esempi di utilizzo a parte il man. A quanto ho capito, i 3 parametri che si passano sono puntatori a funzione che servono a gestire particolari problemi che potrebbero esserci, ma se non so esattamente a cosa starmi attento e quali sono i principali problemi che potrei avere mi serve a poco. Credo che se anche non sapessi cosa farne delle tre funzioni che mi aiutano a gestire il nuovo processo e le mettessi a NULL, sarebbe identico ad una fork (ma questa è una mia supposizione).

    Per questo chiedevo principalmente se qualcuno aveva "esperienza" con i problemi dovuti alla mescolanza di thread e processi.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Cell
    Che io sappia (magari mi sbaglio), quando si fa un'exec viene coinvolto TUTTO il processo, quindi tutti i thread che esso comprende. Se faccio una exec in un thread, sostituisco tutto il processo con quel thread, ovvero mi perdo gli altri thread (non l'ho provato, ma a livello teorico credo che sia così).
    Se fai prima la fork() all'interno di un thread e poi nel nuovo processo richiami la exec(), il processo padre rimane attivo con tutti i suoi thread mentre il nuovo esegue il programma argomento di exec(). In realtà non so (o non ricordo) se il nuovo processo "eredita" i thread dal padre, è probabile che dipenda dal sistema.
    every day above ground is a good one

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117
    Originariamente inviato da YuYevon
    Se fai prima la fork() all'interno di un thread e poi nel nuovo processo richiami la exec(), il processo padre rimane attivo con tutti i suoi thread mentre il nuovo esegue il programma argomento di exec().
    Sì, questo lo so... rispondevo a shodan che, a quanto ho capito, suggeriva anziché fare l'exec in un nuovo processo di farla in un nuovo thread, ma ciò rischia di buttarmi al vento tutto il resto del processo.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da Cell
    Sì, questo lo so... rispondevo a shodan che, a quanto ho capito, suggeriva anziché fare l'exec in un nuovo processo di farla in un nuovo thread, ma ciò rischia di buttarmi al vento tutto il resto del processo.
    Direi così anche io, ed in effetti dalle man pages di execve() (di cui tutte le altre funzioni exec*() sono front-ends) leggo:

    ...
    Note the following further points:

    * All threads other than the calling thread are destroyed during an execve(). Mutexes, condition variables, and other pthreads objects are not preserved
    ...
    every day above ground is a good one

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.