Ignore SIGTRAP in child process on macOS

When running gn under Xcode (e.g. when debugging), the child process
is sent a SIGTRAP signal and immediately dies as it is not handled.
This makes gn consider that action, action_foreach and exec_script
have failed due to the signalled state of the child process.

To prevent this, ignore the SIGTRAP signal on macOS in the child
process.

Bug: none
Change-Id: Ic28312939d646db7d49c767d37566f3a8ed2c923
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/6662
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/src/gn/exec_process.cc b/src/gn/exec_process.cc
index eeebcb4..2f001bf 100644
--- a/src/gn/exec_process.cc
+++ b/src/gn/exec_process.cc
@@ -204,6 +204,13 @@
       return false;
     case 0:  // child
     {
+#if defined(OS_MAC)
+      // When debugging the app under Xcode, the child will receive a SIGTRAP
+      // signal which will terminate the child process. Ignore the signal to
+      // allow debugging under macOS.
+      sigignore(SIGTRAP);
+#endif
+
       // DANGER: no calls to malloc are allowed from now on:
       // http://crbug.com/36678
       //