Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker
Analizziamo nel dettaglio DJI RS 5, l'ultimo arrivato della famiglia Ronin progettato per videomaker solisti e piccoli studi. Tra tracciamento intelligente migliorato e ricarica ultra rapida, scopriamo come questo gimbal eleva la qualità delle produzioni.
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming
AMD Ryzen 7 9850X3D è la nuova CPU gaming di riferimento grazie alla 3D V-Cache di seconda generazione e frequenze fino a 5,6 GHz. Nei test offre prestazioni superiori a 9800X3D e 7800X3D, confermando la leadership AMD nel gaming su PC.
Le soluzioni FSP per il 2026: potenza e IA al centro
Le soluzioni FSP per il 2026: potenza e IA al centro
In occasione del Tech Tour 2025 della European Hardware Association abbiamo incontrato a Taiwan FSP, azienda impegnata nella produzione di alimentatori, chassis e soluzioni di raffreddamento tanto per clienti OEM come a proprio marchio. Potenze sempre più elevate negli alimentatori per far fronte alle necessità delle elaborazioni di intelligenza artificiale.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 24-04-2004, 22:02   #1
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
[c/c++]Generare un processo e se non termina entro 5 secondi lo uccido

Salve,

quello che devo fare è la seguente cosa: devo eseguire un certo numero di computazioni; ognuna di queste deve essere eseguita in un processo separato. Un nuovo processo non puo essere creato prima che il precedente si sia concluso, e ogni processo deve concludersi ad esempio entro 5 secondi, se no lo si uccide e si passa a generare il successivo. Io ho fatto cosi:

- ho registrato una funzione handler per il segnale SIGALRM, che posso generare a mio piacimento, specificando dopo quanti secondi deve esserci il segnale.

- eseguo la fork, registrandomi il pid del processo creato; quindi chiamo la alarm(5) per generare l'allarme tra 5 secondi, dopodichè chiamo waitpid(pid, ...) per attendere la terminazione del processo. Se il processo non termina entro 5 secondi, scatta l'allarme, e la funzione handler esegue una kill(pid) per uccidere il processo che non è terminato.

Pero potrebbe esserci un inconveniente; supponiamo che debba generare 10 peocessi uno dopo l'altro; se imposto il codice in questo modo:

Codice:
for(int 1 = 0; i < 10; i++)
      pid = fork();
      alarm(5);
      if(pid == 0)
             break;
      wait(pid....);
potrebbe verificarsi che l'allarme dell'iterazione precedente venga a scattare proprio subito dopo la fork ma prima della nuova chiamata ad alarm(5): in questo modo il processo appena creato sarebbe ucciso senza che siano passati i 5 secondi. Allora potrei mettere alarm(5) prima della fork:

CODE]
for(int 1 = 0; i < 10; i++)
alarm(5);
pid = fork();
if(pid == 0)
break;
wait(pid....);
[/code]

In questo modo se un processo viene ucciso questo è per forza quello generato subito dopo la chiamata ad alarm() e non uno precedente (perche se il precedente non fosse terminato sarei ancora bloccato nella wait). Pero non posso avere la certezza che l'istruzione:

pid = fork();

venga conclusa entro 5 secondi: se cosi non avviene avrei che il segnale della precedente alarm() potrebbe essere generato quando il figlio ancora non è stato creato e quindi sarebbe sprecato, con la conseguenza che se non terminasse non saprei come ucciderlo perche il relativo allarme è gia avvenuto.

Sono giusti i miei ragionamenti? Potrei eliminare il problema della prima versione concludendo il cilco for con una chiamata alarm(0)?

Tra le due versioni penso che la seconda sia piu sicura, ma come posso impostare la cosa per avere l'assoluta certezza di quel che deve succedere? Ci sono funzioni alternative e piu specifiche che posso usare? C'è ad esempio una funzione che dato il pid mi dice se il processo relativo a quel pid e terminato o no?

Grazie, ciao.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 24-04-2004, 22:16   #2
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Ho trovato sulla documentazione a proposito di alarm(seconds):

If seconds is 0, a pending alarm request, if any, is cancelled.

Quindi se cancello la richiesta di allarme subito dopo la terminazione di un processo, un allarme dell'iterazuine precedente non dovrebbbe interferire con la successiva iterazione:

Codice:
for(int 1 = 0; i < 10; i++)
      pid = fork();
      alarm(5);
      if(pid == 0)
             break;
      wait(pid....);
      alarm(0);
Dite che va bene cosi? O ci sono dei dettagli che mi sfuggono?
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2004, 16:17   #3
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Hai una piccola race condition tra la wait e la alarm(0), ma è assolutamente innocua. Va bene come hai fatto.
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2004, 19:43   #4
anx721
Senior Member
 
L'Avatar di anx721
 
Iscritto dal: Oct 2002
Città: Roma
Messaggi: 1502
Quote:
Originariamente inviato da ilsensine
Hai una piccola race condition tra la wait e la alarm(0), ma è assolutamente innocua. Va bene come hai fatto.
Se hai tempo me la spieghi?

Se ti riferisci al fatto che potrebbe scattare l'allarme precedente dopo la wait ma prima del nuovo alarm(0), verrebbe eseguita la kill sul pid sul processo appena terminato, che mi sembra non dia problemi.
__________________
Sun Certified Java Programmer
EUCIP Core Level Certified

European Certification of Informatics Professionals

Ultima modifica di anx721 : 25-04-2004 alle 20:20.
anx721 è offline   Rispondi citando il messaggio o parte di esso
Old 25-04-2004, 20:21   #5
ilsensine
Senior Member
 
L'Avatar di ilsensine
 
Iscritto dal: Apr 2000
Città: Roma
Messaggi: 15625
Se un processo termina regolarmente poco prima dei 5 secondi, la wait termina e viene eseguito successivamente alarm(0). Se tra la wait e la alarm scadono i 5 secondi, viene generato un SIGALRM dopo la wait (quindi a processo finito) ma prima della alarm(0). E' un evento a probabilità quasi nulla, ma possibile (e comunque assolutamente innocuo).
__________________
0: or %edi, %ecx; adc %eax, (%edx); popf; je 0b-22; pop %ebx; fadds 0x56(%ecx); lds 0x56(%ebx), %esp; mov %al, %al
andeqs pc, r1, #147456; blpl 0xff8dd280; ldrgtb r4, [r6, #-472]; addgt r5, r8, r3, ror #12
ilsensine è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


DJI RS 5: stabilizzazione e tracking intelligente per ogni videomaker DJI RS 5: stabilizzazione e tracking intelligent...
AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequenze al top per il gaming AMD Ryzen 7 9850X3D: Zen 5, 3D V-Cache e frequen...
Le soluzioni FSP per il 2026: potenza e IA al centro Le soluzioni FSP per il 2026: potenza e IA al ce...
AWS annuncia European Sovereign Cloud, il cloud sovrano per convincere l'Europa AWS annuncia European Sovereign Cloud, il cloud ...
Redmi Note 15 Pro+ 5G: autonomia monstre e display luminoso, ma il prezzo è alto Redmi Note 15 Pro+ 5G: autonomia monstre e displ...
Intel Xeon 600, le nuove CPU per le work...
Tesla, è ufficiale: i Robotaxi fa...
DeepL sempre più evoluto: arriva ...
Un vecchio assegno venduto a 4.800 volte...
Portatili Dell 16 in offerta su Amazon: ...
Amazfit punta ancora più in alto:...
Deep tech e venture capital: ScaleUp Lab...
GWM ha creato un font specifico per i di...
Oro rosa e charm Les Néréi...
La XPeng P7+ è salpata in direzio...
Quali sono i componenti più affid...
Amazon Haul raddoppia lo sconto: -30% su...
Germania e Danimarca accelerano sull'eol...
Azienda cinese che chiede aiuto ad una a...
Per aumentare la competitività ne...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 00:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v