{"Entry":{"collection":"guc","key":"send_abort_for_kill","name":"send_abort_for_kill","aliases":[],"metadata":{"baseline":false,"boot_human":"Not specified","boot_val":null,"category":"Developer Options","category_zh":"","changed_in":[],"changes":[{"documentation_changed":false,"fields":{},"from":"15","status":"added","to":"16"}],"content_hash":"350dcf1b7afd5e9c7f626aad4e6bd04b18567d357af303badf0d2ec6c78e5ed9","context":"","default_changed_in":[],"default_history":[{"from":"16","to":"19","value":"off"}],"derived_content_hash":"3853ddf1f74803d289c6e1d337d6e8b54dc4eaa790559c175e63cabb5fa0b6c4","documentation_refresh":{"batch":"20261113","original_source_rev":"wiki-repair-20261023:ae91fc1c997c0e00878ae0c080be7e47167a73d401c262b0adc46c6d4b847e65","versions":{"16":"16.16","17":"17.12","18":"18.7","19":"19rc2"}},"editorial":{"advice":{"olap":"Long analytical runs can amplify send_abort_for_kill's debug overhead and artifacts. Prefer standard EXPLAIN and statistics first, and isolate any developer experiment from normal users.","oltp":"Do not tune production OLTP with send_abort_for_kill. Enable it only for a bounded reproduction with an owner, log/disk budget, rollback condition, and evidence-capture plan; restore the default immediately afterward.","small":"Keep send_abort_for_kill at its upstream default. A small host has less spare CPU, disk, connection, and log capacity for developer instrumentation."},"mechanism":["When a child does not exit after SIGQUIT, the postmaster normally escalates to SIGKILL after five seconds. send_abort_for_kill uses SIGABRT instead so the stuck child normally writes a core dump.","SIGABRT provides forensic state but can take time and disk space, potentially delaying crash recovery. It is not guaranteed to terminate as promptly as SIGKILL in every failure mode.","PostgreSQL does not clean generated cores. OS policy and monitoring must prevent repeated stuck processes from filling storage. Its SIGHUP context allows configuration reload without a server restart."],"pitfalls":["Leaving send_abort_for_kill enabled after the bounded diagnostic or recovery task.","Running the experiment on the only copy of production data.","Underestimating log, core-file, temporary-file, WAL, CPU, or connection-slot amplification.","Treating a server that merely starts or completes a query as proof that data and behavior are correct."],"references":[{"title":"PostgreSQL 19 Beta 4: send_abort_for_kill","url":"https://www.postgresql.org/docs/19/runtime-config-developer.html#GUC-SEND-ABORT-FOR-KILL"},{"title":"PostgreSQL 19 release notes","url":"https://www.postgresql.org/docs/19/release-19.html"}],"related":["send_abort_for_crash","remove_temp_files_after_crash","log_error_verbosity","data_directory"],"summary":"send_abort_for_kill — Send SIGABRT not SIGKILL to stuck child processes. Observed in PG16–19 Beta 4; its last measured boot default is off in PG19 Beta 4, with sighup context. This is a beta-snapshot fact and can change before PostgreSQL 19 GA."},"enumvals":[],"first_version":"16","group":"Developer Options","group_slug":"developer","imported_at":"2026-09-27T17:57:31.937233+08:00","intro_commit":{"authored_at":"2022-11-21T11:59:29-05:00","discussion":["https://postgr.es/m/2251016.1668797294@sss.pgh.pa.us"],"hash":"51b5834cd53f0bd068729043b55f7da3ca6bb15f","subject":"Provide options for postmaster to kill child processes with SIGABRT.","url":"https://git.postgresql.org/gitweb/?p=postgresql.git;a=commit;h=51b5834cd53f0bd068729043b55f7da3ca6bb15f"},"key":"send_abort_for_kill","last_version":"20","max_val":"","min_val":"","name":"send_abort_for_kill","position":349,"present_in":["16","17","18","19","20"],"repair_provenance":{"original_source_revision":"english-manuals:aec71a4bc88cafaa6bd1bd3d90973486d13e9386ea493b4255ec5a9d2eb27c6c","receipt_sha256":"fd7bda0364e038e19e102eeb239975813e5eab7ec8b40288cef5ac06625bef2b","repair":"wiki-repair-20261023"},"short_desc":"By default, after attempting to stop a child process with SIGQUIT, the postmaster will wait five seconds and then send SIGKILL to force immediate termination.","short_desc_zh":"","source_rev":"wiki-repair-20261023:ae91fc1c997c0e00878ae0c080be7e47167a73d401c262b0adc46c6d4b847e65","unit":"","vartype":"bool"}},"Definition":{"Collection":"guc","Key":"send_abort_for_kill","SourceDatabase":"center","Version":"18","SourceTable":"guc","SourceKey":"send_abort_for_kill","SourceRevision":"wiki-repair-20261023:ae91fc1c997c0e00878ae0c080be7e47167a73d401c262b0adc46c6d4b847e65","Facts":{"boot_val":"off","category":"Developer Options","context":"sighup","description":"By default, after attempting to stop a child process with SIGQUIT, the postmaster will wait five seconds and then send SIGKILL to force immediate termination. When this option is set to on, SIGABRT is sent instead of SIGKILL. That normally results in production of a core dump file for each such child process. This can be handy for investigating the states of “stuck” child processes. It can also consume lots of disk space in the event of repeated crashes, so do not enable this on systems you are not monitoring carefully. Beware that no support exists for cleaning up the core file(s) automatically. This parameter can only be set in the postgresql.conf file or on the server command line.","description_zh":"默认情况下，在尝试用 SIGQUIT 停止子进程之后，主进程会等待五秒，然后发送 SIGKILL 强制立即终止。当该选项设置为 on 时，则会发送 SIGABRT 而不是 SIGKILL。这通常会让每个这类子进程生成一个 core dump 文件。这有助于调查那些“卡住”的子进程状态。但在反复崩溃时，它也可能消耗大量磁盘空间，因此不要在未严密监控的系统上启用它。请注意，系统并不支持自动清理这些 core 文件。这个参数只能在 postgresql.conf 文件中或服务器命令行中设置。","description_zh_html":"\u003cp\u003e\n        默认情况下，在尝试用 \u003cspan class=\"systemitem\"\u003eSIGQUIT\u003c/span\u003e 停止子进程之后，主进程会等待五秒，然后发送 \u003cspan class=\"systemitem\"\u003eSIGKILL\u003c/span\u003e 强制立即终止。当该选项设置为 \u003ccode class=\"literal\"\u003eon\u003c/code\u003e 时，则会发送 \u003cspan class=\"systemitem\"\u003eSIGABRT\u003c/span\u003e 而不是 \u003cspan class=\"systemitem\"\u003eSIGKILL\u003c/span\u003e。这通常会让每个这类子进程生成一个 core dump 文件。这有助于调查那些\u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003e卡住\u003c/span\u003e”\u003c/span\u003e的子进程状态。但在反复崩溃时，它也可能消耗大量磁盘空间，因此不要在未严密监控的系统上启用它。请注意，系统并不支持自动清理这些 core 文件。这个参数只能在 \u003ccode class=\"filename\"\u003epostgresql.conf\u003c/code\u003e 文件中或服务器命令行中设置。\n       \u003c/p\u003e","doc":{"anchor":"GUC-SEND-ABORT-FOR-KILL","file":"runtime-config-developer.html","lang":"en","sha256":"a3f6a107ed6ba4edaf6df03e52f4a469bd09350d545e4ff419e62844025ec1cf","slug":"18"},"doc_html":"\u003cp\u003e\n        By default, after attempting to stop a child process with\n        \u003cspan class=\"systemitem\"\u003eSIGQUIT\u003c/span\u003e, the postmaster will wait five\n        seconds and then send \u003cspan class=\"systemitem\"\u003eSIGKILL\u003c/span\u003e to force\n        immediate termination.  When this option is set\n        to \u003ccode class=\"literal\"\u003eon\u003c/code\u003e, \u003cspan class=\"systemitem\"\u003eSIGABRT\u003c/span\u003e is sent\n        instead of \u003cspan class=\"systemitem\"\u003eSIGKILL\u003c/span\u003e.  That normally results\n        in production of a core dump file for each such child process.\n        This can be handy for investigating the states\n        of \u003cspan class=\"quote\"\u003e“\u003cspan class=\"quote\"\u003estuck\u003c/span\u003e”\u003c/span\u003e child processes.  It can also consume lots\n        of disk space in the event of repeated crashes, so do not enable\n        this on systems you are not monitoring carefully.\n        Beware that no support exists for cleaning up the core file(s)\n        automatically.\n        This parameter can only be set in\n        the \u003ccode class=\"filename\"\u003epostgresql.conf\u003c/code\u003e file or on the server\n        command line.\n       \u003c/p\u003e","doc_same_as":"","documentation_revision":{"inputs":[{"file":"runtime-config-developer.html","kind":"same-version-reviewed-manual","locale":"en","sha256":"a3f6a107ed6ba4edaf6df03e52f4a469bd09350d545e4ff419e62844025ec1cf","version":"18.7"},{"file":"runtime-config-developer.html","kind":"same-version-reviewed-manual","locale":"zh-Hans","sha256":"e7e22aa5738a1d376b84af1adca796c5e14746266733f925eb50c3ef86a50655","version":"18.7"}],"release":"18.7","runtime_remeasured":false,"source_revision":"pgdoc:b9f0e7232f60f380d642ac9b99226606c254b552"},"documented":true,"enumvals":null,"extra_desc":null,"lang":"en","max_val":null,"metadata_version":"18","min_val":null,"name":"send_abort_for_kill","short_desc":"Send SIGABRT not SIGKILL to stuck child processes.","source":"pg-settings-source-snapshot","translation_provenance":{"inputs":[{"kind":"current-pgdoc-translation","path":"/Users/vonng/pgsty/pgdoc/zh/18/html/runtime-config-developer.html","sha256":"3c08bf624188bbb0733dc7854e61c0c251c2578311ac3dc8fa626ab21b7911d1"}],"kind":"same-version-pgdoc","locale":"zh-Hans","source_revision":"b1b500221dbe5437cfca004d6b04d3f6e422765d","version":"18"},"unit":null,"vartype":"bool","zh_from":"same-version-manual"},"ManualEvidence":{"doc":{"anchor":"GUC-SEND-ABORT-FOR-KILL","file":"runtime-config-developer.html","lang":"en","sha256":"a3f6a107ed6ba4edaf6df03e52f4a469bd09350d545e4ff419e62844025ec1cf","slug":"18"}},"MeasuredEvidence":{"metadata_version":"18"}},"Text":{"Collection":"guc","Key":"send_abort_for_kill","SourceDatabase":"center","Version":"18","Locale":"en","Title":"send_abort_for_kill","Summary":"By default, after attempting to stop a child process with SIGQUIT, the postmaster will wait five seconds and then send SIGKILL to force immediate termination. When this option is set to on, SIGABRT is sent instead of SIGKILL. That normally results in production of a core dump file for each such child process. This can be handy for investigating the states of “stuck” child processes. It can also consume lots of disk space in the event of repeated crashes, so do not enable this on systems you are not monitoring carefully. Beware that no support exists for cleaning up the core file(s) automatically. This parameter can only be set in the postgresql.conf file or on the server command line.","BodyHTML":"\u003cp\u003e\n        By default, after attempting to stop a child process with\n        \u003cspan\u003eSIGQUIT\u003c/span\u003e, the postmaster will wait five\n        seconds and then send \u003cspan\u003eSIGKILL\u003c/span\u003e to force\n        immediate termination.  When this option is set\n        to \u003ccode\u003eon\u003c/code\u003e, \u003cspan\u003eSIGABRT\u003c/span\u003e is sent\n        instead of \u003cspan\u003eSIGKILL\u003c/span\u003e.  That normally results\n        in production of a core dump file for each such child process.\n        This can be handy for investigating the states\n        of \u003cspan\u003e“\u003cspan\u003estuck\u003c/span\u003e”\u003c/span\u003e child processes.  It can also consume lots\n        of disk space in the event of repeated crashes, so do not enable\n        this on systems you are not monitoring carefully.\n        Beware that no support exists for cleaning up the core file(s)\n        automatically.\n        This parameter can only be set in\n        the \u003ccode\u003epostgresql.conf\u003c/code\u003e file or on the server\n        command line.\n       \u003c/p\u003e","SourceRevision":"wiki-repair-20261023:ae91fc1c997c0e00878ae0c080be7e47167a73d401c262b0adc46c6d4b847e65","ContentHash":"0e97068cc6799fc4a43e1f1557876c0eb9bfec30ba886e4e1759ed130afdc449","Payload":{"description":"By default, after attempting to stop a child process with SIGQUIT, the postmaster will wait five seconds and then send SIGKILL to force immediate termination. When this option is set to on, SIGABRT is sent instead of SIGKILL. That normally results in production of a core dump file for each such child process. This can be handy for investigating the states of “stuck” child processes. It can also consume lots of disk space in the event of repeated crashes, so do not enable this on systems you are not monitoring carefully. Beware that no support exists for cleaning up the core file(s) automatically. This parameter can only be set in the postgresql.conf file or on the server command line."}},"RequestedLocale":"en","Fallback":false,"Versions":["16","17","18","19","20"],"Locales":["en","zh-Hans"],"Signatures":null,"Spellings":null,"SQLState":null,"Evidence":null}
