cpython/Include/internal
Gregory P. Smith 38f11cc3f6
bpo-1054041: Exit properly after an uncaught ^C. (#11862)
* bpo-1054041: Exit properly by a signal after a ^C.

An uncaught KeyboardInterrupt exception means the user pressed ^C and
our code did not handle it.  Programs that install SIGINT handlers are
supposed to reraise the SIGINT signal to the SIG_DFL handler in order
to exit in a manner that their calling process can detect that they
died due to a Ctrl-C.  https://www.cons.org/cracauer/sigint.html

After this change on POSIX systems

 while true; do python -c 'import time; time.sleep(23)'; done

can be stopped via a simple Ctrl-C instead of the shell infinitely
restarting a new python process.

What to do on Windows, or if anything needs to be done there has not
yet been determined.  That belongs in its own PR.

TODO(gpshead): A unittest for this behavior is still needed.

* Do the unhandled ^C check after pymain_free.

* Return STATUS_CONTROL_C_EXIT on Windows.

* Fix ifdef around unistd.h include.

* 📜🤖 Added by blurb_it.

* Add STATUS_CTRL_C_EXIT to the os module on Windows

* Add unittests.

* Don't send CTRL_C_EVENT in the Windows test.

It was causing CI systems to bail out of the entire test suite.

See https://dev.azure.com/Python/cpython/_build/results?buildId=37980
for example.

* Correct posix test (fail on macOS?) check.

* STATUS_CONTROL_C_EXIT must be unsigned.

* Improve the error message.

* test typo :)

* Skip if the bash version is too old.

...and rename the windows test to reflect what it does.

* min bash version is 4.4, detect no bash.

* restore a blank line i didn't mean to delete.

* PyErr_Occurred() before the Py_DECREF(co);

* Don't add os.STATUS_CONTROL_C_EXIT as a constant.

* Update the Windows test comment.

* Refactor common logic into a run_eval_code_obj fn.
2019-02-16 12:57:40 -08:00
..
pycore_accu.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_atomic.h bpo-35758: Fix building on ARM + MSVC (gh-11531) 2019-01-21 21:49:40 +01:00
pycore_ceval.h bpo-35423: Stop using the "pending calls" machinery for signals. (gh-10972) 2019-01-11 14:26:55 -07:00
pycore_condvar.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_context.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_fileutils.h bpo-34523: Fix C locale coercion on FreeBSD CURRENT (GH-10672) 2018-11-23 13:08:26 +01:00
pycore_getopt.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_gil.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_hamt.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00
pycore_object.h bpo-35059: Add _PyObject_CAST() macro (GH-10645) 2018-11-22 02:57:29 +01:00
pycore_pathconfig.h bpo-34725: Adds _Py_SetProgramFullPath so embedders may override sys.executable (GH-9860) 2018-11-17 20:41:48 -08:00
pycore_pyhash.h bpo-35081: Rename internal headers (GH-10275) 2018-11-12 16:53:38 +01:00
pycore_pylifecycle.h bpo-1054041: Exit properly after an uncaught ^C. (#11862) 2019-02-16 12:57:40 -08:00
pycore_pymem.h bpo-35081: Make some _PyGC macros internal (GH-10507) 2018-11-13 12:52:18 +01:00
pycore_pystate.h bpo-35081: Rename internal headers (GH-10275) 2018-11-12 16:53:38 +01:00
pycore_tupleobject.h bpo-35081: Add Include/internal/pycore_tupleobject.h (GH-10705) 2018-11-25 23:56:17 +01:00
pycore_warnings.h bpo-35081: Internal headers require Py_BUILD_CORE (GH-10363) 2018-11-09 13:03:37 +01:00