diff -uN zenity-2.14.0/src/option.c zenity-2.14.1/src/option.c
--- zenity-2.14.0/src/option.c	2006-03-06 20:24:35.000000000 -0500
+++ zenity-2.14.1/src/option.c	2006-03-27 00:51:00.000000000 -0500
@@ -81,6 +81,7 @@
 static int      zenity_progress_percentage;
 static gboolean zenity_progress_pulsate;
 static gboolean zenity_progress_auto_close;
+static gboolean zenity_progress_auto_kill;
 
 /* Question Dialog Options */
 static gboolean zenity_question_active;
@@ -551,6 +552,16 @@
     N_("Dismiss the dialog when 100% has been reached"),
     NULL
   },
+  {
+    "auto-kill",
+    '\0',
+    0,
+    G_OPTION_ARG_NONE,
+    &zenity_progress_auto_kill,
+    /* xgettext: no-c-format */
+    N_("Kill parent process when Cancel is pressed"),
+    NULL
+  },
   { 
     NULL 
   }
@@ -963,6 +974,7 @@
   zenity_progress_percentage = 0;
   zenity_progress_pulsate = FALSE;
   zenity_progress_auto_close = FALSE;
+  zenity_progress_auto_kill = FALSE;
 
   return TRUE;
 }
@@ -1270,6 +1282,7 @@
     results->progress_data->dialog_text = zenity_general_dialog_text;
     results->progress_data->pulsate = zenity_progress_pulsate;
     results->progress_data->autoclose = zenity_progress_auto_close;
+    results->progress_data->autokill = zenity_progress_auto_kill;
     results->progress_data->percentage = zenity_progress_percentage;
   } else {
     if (zenity_progress_pulsate)
@@ -1283,6 +1296,10 @@
     if (zenity_progress_auto_close)
       zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_close),
                            ERROR_SUPPORT);
+                           
+    if (zenity_progress_auto_kill)
+      zenity_option_error (zenity_option_get_name (progress_options, &zenity_progress_auto_kill),
+                           ERROR_SUPPORT);
   }
     
   return TRUE;
diff -uN zenity-2.14.0/src/progress.c zenity-2.14.1/src/progress.c
--- zenity-2.14.0/src/progress.c	2005-11-14 23:14:35.000000000 -0500
+++ zenity-2.14.1/src/progress.c	2006-03-27 01:22:19.000000000 -0500
@@ -37,6 +37,8 @@
 static ZenityData *zen_data;
 static GIOChannel *channel;
 
+static gboolean autokill;
+
 gint zenity_progress_timeout (gpointer data);
 gint zenity_progress_pulsate_timeout (gpointer data);
 
@@ -214,6 +216,8 @@
     gtk_progress_bar_set_fraction (GTK_PROGRESS_BAR (progress_bar), 
                                    progress_data->percentage/100.0);
 
+  autokill = progress_data->autokill;
+
   zenity_util_show_dialog (dialog);
   zenity_progress_read_info (progress_data);
 
@@ -229,14 +233,19 @@
       break;
 		
     case GTK_RESPONSE_CANCEL:
-      /* FIXME: This should kill off the parent process nicely and return an error code
-       * I'm pretty sure there is a nice way to do this, but I'm clueless about this
-       * stuff. Should be using SIGHUP instead of 1 though.
-       */
-      kill (getppid (), 1);
+      /* We do not want to kill the parent process, in order to give the user
+         the ability to choose the action to be taken. See bug #310824.
+		 -- Monday 27, March 2006
+		 But we want to give people the option to choose this behavior.
+      */
+      if (autokill) {
+        kill (getppid (), 1);
+        zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
+        break;
+      }
       zen_data->exit_code = zenity_util_return_exit_code (ZENITY_CANCEL);
       break;
-  
+
     default:
       /* Esc dialog */
       zen_data->exit_code = zenity_util_return_exit_code (ZENITY_ESC);
diff -uN zenity-2.14.0/src/zenity.h zenity-2.14.1/src/zenity.h
--- zenity-2.14.0/src/zenity.h	2005-12-15 00:40:15.000000000 -0500
+++ zenity-2.14.1/src/zenity.h	2006-03-27 00:39:27.000000000 -0500
@@ -89,6 +89,7 @@
   gchar   *entry_text;
   gboolean pulsate;
   gboolean autoclose;
+  gboolean autokill;
   gdouble  percentage;
 } ZenityProgressData;
 
