stop the programm with attachinterrupt dont work :(

Hi there, i wrote a little proramm for a machine, the start button work very well but the stop button not.
i tried to use the atachinterrupt command, but the examples in the internet didnt helped me.
If i push stop button, the last point of the main loop stop (but led still burn) and after release it go back to the main loop. But i want that the stop button kill the main loop. so that i need to push start again. pls help. ragards

program:
const int stopppin = 2; //Eingänge deklarieren
const int startpin = 23;
const int magnetpin = 24;
const int distanzlipin = 25;
const int distanzrepin = 26;
const int motorlipin = 30;
const int motorrepin = 31;
const int hubmagnetlipin = 32;
const int hubmagnetrepin = 33;
const int warnrotpin = 34;
const int warngelbpin = 35;
const int warngruenpin = 36;
const int summerpin = 37;
const int led = 13;
volatile int startstatus=LOW;
int magnetstatus;
int warnrotstatus;
//volatile int stoppstatus; //Variable nicht im Register sonder Ram

void setup() {
pinMode (stopppin, INPUT); //Low=High wegen PULLUP
digitalWrite(stopppin, HIGH); //High setzen wegen PULLUP
pinMode (startpin, INPUT); //Low=High wegen PULLUP
digitalWrite(startpin, HIGH);
pinMode (magnetpin, INPUT);
pinMode (distanzlipin, INPUT);
pinMode (distanzrepin, INPUT);
pinMode (motorlipin, OUTPUT);
digitalWrite(motorlipin, HIGH); //HIGH = Relais Aus
pinMode (motorrepin, OUTPUT);
digitalWrite(motorrepin, HIGH);
pinMode (hubmagnetlipin, OUTPUT);
digitalWrite(hubmagnetlipin, HIGH);
pinMode (hubmagnetrepin,OUTPUT);
digitalWrite(hubmagnetrepin, HIGH);
pinMode (warnrotpin, OUTPUT);
digitalWrite(warnrotpin, HIGH);
pinMode (warngelbpin, OUTPUT);
digitalWrite(warngelbpin, HIGH);
pinMode (warngruenpin, OUTPUT);
digitalWrite(warngruenpin, HIGH);
pinMode (summerpin, OUTPUT);
digitalWrite(summerpin, HIGH);
pinMode (led, OUTPUT);
attachInterrupt(0, abbruch, CHANGE);
}

void loop () {
unserprogramm ();
}

void unserprogramm () {

int gesperrtli=0; //Gesperrt Merker links
int gesperrtre=0; //Gesperrt Merker rechts

startstatus=digitalRead(startpin); //lese Starttaste

while (startstatus == LOW){ //Solange einmal Start betätigt

if (digitalRead(warnrotpin)==HIGH){
if (digitalRead(magnetpin)==HIGH){
if (digitalRead(distanzlipin)==HIGH){
if (gesperrtli==0){
digitalWrite(hubmagnetrepin, LOW);
delay(200);
digitalWrite(motorlipin, LOW);
delay(3000);
if (digitalRead(distanzlipin)==LOW){
delay(4000);
digitalWrite(motorlipin, HIGH);
digitalWrite(hubmagnetrepin, HIGH);
digitalWrite(summerpin, LOW);
digitalWrite(warngruenpin, LOW);
delay(1000);
digitalWrite(summerpin, HIGH);
digitalWrite(warngruenpin, HIGH);
}
else{
digitalWrite(motorlipin, HIGH);
digitalWrite(hubmagnetrepin, HIGH);
if (gesperrtre==1){
digitalWrite(warnrotpin, LOW);
}
else{
gesperrtli=1;
digitalWrite(warngelbpin, LOW);
delay(15000);
digitalWrite(warngelbpin, HIGH);
}
}
}
}
}
else {
digitalWrite(warngelbpin, LOW);
digitalWrite(warnrotpin, LOW);
}
}
if (digitalRead(warnrotpin)==HIGH){
if (digitalRead(magnetpin)==HIGH){
if (digitalRead(distanzrepin)==HIGH){
if (gesperrtre==0){
digitalWrite(hubmagnetlipin, LOW);
delay(200);
digitalWrite(motorrepin, LOW);
delay(3000);
if (digitalRead(distanzrepin)==LOW){
delay(4000);
digitalWrite(motorrepin, HIGH);
digitalWrite(hubmagnetlipin, HIGH);
digitalWrite(summerpin, LOW);
digitalWrite(warngruenpin, LOW);
delay(1000);
digitalWrite(summerpin, HIGH);
digitalWrite(warngruenpin, HIGH);
}
else{
digitalWrite(motorrepin, HIGH);
digitalWrite(hubmagnetlipin, HIGH);
if (gesperrtli==1){
digitalWrite(warnrotpin, LOW);
}
else{
gesperrtre=1;
digitalWrite(warngelbpin, LOW);
delay(15000);
digitalWrite(warngelbpin, HIGH);
}
}
}
}
}
else {
digitalWrite(warngelbpin, LOW);
digitalWrite(warnrotpin, LOW);
}
}
}
}

void abbruch (){
startstatus = !startstatus;
}

The interrupt sets a flag that you rarely check. How can you expect changing the flag to do anything when you go so long between looking at it?

Get rid of every single delay() call in your program. Look at the blink without delay example, and investigate state machines.

PaulS:
Get rid of every single delay() call in your program.

... and then stop using interrupts. They aren't needed here. Just read and debounce the digital input - there are example sketches that demonstrate how to do that.