blob: 005e0e6545c829ec995eefc6c83147bce8836b0f [file] [log] [blame]
<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Resets the signal handler to the default one and removes all its hooks."><meta name="keywords" content="rust, rustlang, rust-lang, cleanup_signal"><title>cleanup_signal in signal_hook::cleanup - Rust</title><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Regular.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../FiraSans-Medium.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Regular.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceSerif4-Bold.ttf.woff2"><link rel="preload" as="font" type="font/woff2" crossorigin href="../../SourceCodePro-Semibold.ttf.woff2"><link rel="stylesheet" href="../../normalize.css"><link rel="stylesheet" href="../../rustdoc.css" id="mainThemeStyle"><link rel="stylesheet" href="../../ayu.css" disabled><link rel="stylesheet" href="../../dark.css" disabled><link rel="stylesheet" href="../../light.css" id="themeStyle"><script id="default-settings" ></script><script src="../../storage.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../main.js"></script><noscript><link rel="stylesheet" href="../../noscript.css"></noscript><link rel="alternate icon" type="image/png" href="../../favicon-16x16.png"><link rel="alternate icon" type="image/png" href="../../favicon-32x32.png"><link rel="icon" type="image/svg+xml" href="../../favicon.svg"></head><body class="rustdoc fn"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle">&#9776;</button><a class="sidebar-logo" href="../../signal_hook/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><h2></h2></nav><nav class="sidebar"><a class="sidebar-logo" href="../../signal_hook/index.html"><div class="logo-container"><img class="rust-logo" src="../../rust-logo.svg" alt="logo"></div></a><div class="sidebar-elems"><h2><a href="index.html">In signal_hook::cleanup</a></h2></div></nav><main><div class="width-limiter"><nav class="sub"><form class="search-form"><div class="search-container"><span></span><input class="search-input" name="search" autocomplete="off" spellcheck="false" placeholder="Click or press ‘S’ to search, ‘?’ for more options…" type="search"><div id="help-button" title="help" tabindex="-1"><a href="../../help.html">?</a></div><div id="settings-menu" tabindex="-1"><a href="../../settings.html" title="settings"><img width="22" height="22" alt="Change settings" src="../../wheel.svg"></a></div></div></form></nav><section id="main-content" class="content"><div class="main-heading"><h1 class="fqn">Function <a href="../index.html">signal_hook</a>::<wbr><a href="index.html">cleanup</a>::<wbr><a class="fn" href="#">cleanup_signal</a><button id="copy-path" onclick="copy_path(this)" title="Copy item path to clipboard"><img src="../../clipboard.svg" width="19" height="18" alt="Copy item path"></button></h1><span class="out-of-band"><a class="srclink" href="../../src/signal_hook/cleanup.rs.html#114-124">source</a> · <a id="toggle-all-docs" href="javascript:void(0)" title="collapse all docs">[<span class="inner">&#x2212;</span>]</a></span></div><div class="item-decl"><pre class="rust fn"><code>pub fn cleanup_signal(signal: <a class="type" href="../../libc/unix/type.c_int.html" title="type libc::unix::c_int">c_int</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/nightly/core/result/enum.Result.html" title="enum core::result::Result">Result</a>&lt;<a class="primitive" href="https://doc.rust-lang.org/nightly/std/primitive.unit.html">()</a>, <a class="struct" href="https://doc.rust-lang.org/nightly/std/io/error/struct.Error.html" title="struct std::io::error::Error">Error</a>&gt;</code></pre></div><details class="rustdoc-toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Resets the signal handler to the default one and removes all its hooks.</p>
<p>This resets the signal to the OS default. It doesn’t revert to calling any previous signal
handlers (the ones not handled by <code>signal-hook</code>). All the hooks registered for this signal are
removed.</p>
<p>The intended use case is making sure further instances of a terminal signal have immediate
effect. If eg. a CTRL+C is pressed, the application removes all signal handling and proceeds to
its own shutdown phase. If the shutdown phase takes too long or gets stuck, the user may press
CTRL+C again which will then kill the application immediately, by a default signal action.</p>
<h2 id="warning"><a href="#warning">Warning</a></h2>
<p>This action is <em>global</em> (affecting hooks some other library or unrelated part of program
registered) and <em>irreversible</em>. Once called, registering new hooks for this signal has no
further effect (they’ll appear to be registered, but they won’t be called by the signal). The
latter may change in the future and it won’t be considered a breaking change.</p>
<p>In other words, this is expected to be called only once the application enters its terminal
state and is not supported otherwise.</p>
<p>The function is <strong>not</strong> async-signal-safe. See <a href="fn.register.html" title="register">register</a> and <a href="fn.cleanup_raw.html" title="cleanup_raw">cleanup_raw</a> if you intend to
reset the signal directly from inside the signal handler itself.</p>
<h2 id="examples"><a href="#examples">Examples</a></h2>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>signal_hook::{cleanup, flag, SIGTERM};
<span class="kw">fn </span>main() -&gt; <span class="prelude-ty">Result</span>&lt;(), Error&gt; {
<span class="kw">let </span>terminated = Arc::new(AtomicBool::new(<span class="bool-val">false</span>));
flag::register(SIGTERM, Arc::clone(<span class="kw-2">&amp;</span>terminated))<span class="question-mark">?</span>;
<span class="kw">while </span>!terminated.load(Ordering::Relaxed) {
keep_processing();
}
cleanup::cleanup_signal(SIGTERM)<span class="question-mark">?</span>;
app_cleanup();
<span class="prelude-val">Ok</span>(())
}</code></pre></div>
</div></details></section></div></main><div id="rustdoc-vars" data-root-path="../../" data-current-crate="signal_hook" data-themes="ayu,dark,light" data-resource-suffix="" data-rustdoc-version="1.66.0-nightly (5c8bff74b 2022-10-21)" ></div></body></html>