PDA

Visualizza la versione completa : Linux: una ricorsione infinita basta ad impallarlo?


edriv
25-06-2005, 11:40
Basta un programmino in C :


void f()
{
f();
}

void main(){
f();
}


Per bloccare il mio sistema linux 2.4?
Ho sempre dovuto riavviare il pc "di brutto" perchè non rispondeva più a niente!
E' normale che accada così?
Un bug di un programma potrebbe far perdere tutto il lavoro?

Ikitt
25-06-2005, 11:49
Originariamente inviato da edriv
Basta un programmino in C :


void f()
{
f();
}

void main(){
f();
}


Per bloccare il mio sistema linux 2.4?
Scommetterei anche forte che non e` impallato: e` non-responsivo. In pratica hai appena operato un DoS locale.
Questo comportamento non e` comunque normale, nel senso che i tempi di reazione e` comprensibile che aumentino, ma dovrebbero restare entro limiti tollerabili.

Per risolvere questi problemi, se non puoi impostare limiti sulle risorse, la cosa meno dolorosa da fare e` probabilmente un upgrade al 2.6, abilitando anche la preemption.

Meskalamdug
25-06-2005, 13:10
Io non vorrei provare,si impalla di sicuro,ma una soluzione
anche se brutta esiste..
ulimit!
:D

cso
25-06-2005, 13:21
La prima regola per fare un compilatore o anche roba più sofisticata come gli IDE "dovrebbe" essere quella di poter fermare un programma in loop infinito tramite la pressione di una sequanza di tasti!

Ikitt
25-06-2005, 13:22
Originariamente inviato da cso
La prima regola per fare un compilatore o anche roba più sofisticata come gli IDE "dovrebbe" essere quella di poter fermare un programma in loop infinito tramite la pressione di una sequanza di tasti!
Ovvero? :dottò:

cso
25-06-2005, 13:30
Originariamente inviato da Ikitt
Ovvero? :dottò:
Bhò, dipende dallo strumento che stai usando!
Linux c'entra poco con questo, l'unica cosa che deve fare è restare in piedi senza crashare (vedi windows :fighet: ) ma per questo penso non ci siano problemi!

sthra
25-06-2005, 15:58
Credo sia una delle tante maraviglie del kernel linux.
Io lo definirei ricorsione infinita con probabile sovrascrituttra di stack.

Mo provo anch'io.

E invece a me non dà nessun problema, si ferma tranquillamente con CTRL-C. Quindi è un problema del tuo compilatore.

cso
25-06-2005, 17:44
Di solito le conbinazioni vincenti :D sono CTRL+C, CTRL+CANC, SHIFT+PAUSE\BREAK, CTRL+PAUSE\BREAK

Lethalman
25-06-2005, 21:11
Originariamente inviato da cso
Bhò, dipende dallo strumento che stai usando!
Linux c'entra poco con questo, l'unica cosa che deve fare è restare in piedi senza crashare (vedi windows :fighet: ) ma per questo penso non ci siano problemi!
Che centra il compilatore qui? :master:

mambro
26-06-2005, 00:35
Avete provato qualcosa tipo



void main() {
while (1) {
fork()
}
}


Quella da me fa crashare inesorabilmente tutto, col 2.6 :cry:

Loading