<noscript><linkrel="stylesheet"href="../../../noscript.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../favicon-16x16.png"><linkrel="alternate icon"type="image/png"href="../../../favicon-32x32.png"><linkrel="icon"type="image/svg+xml"href="../../../favicon.svg"></head><bodyclass="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="sidebar"><divclass="sidebar-menu"role="button">☰</div><aclass="sidebar-logo"href="../../../os/index.html"><divclass="logo-container"><imgclass="rust-logo"src="../../../rust-logo.svg"alt="logo"></div>
</a><h2class="location"><ahref="#">Module process</a></h2><divclass="sidebar-elems"><divclass="block items"><ul><li><ahref="#structs">Structs</a></li></ul></div><divid="sidebar-vars"data-name="process"data-ty="mod"data-relpath="./"></div><scriptdefersrc="./sidebar-items.js"></script></div></nav><main><divclass="width-limiter"><divclass="sub-container"><aclass="sub-logo-container"href="../../../os/index.html"><imgclass="rust-logo"src="../../../rust-logo.svg"alt="logo"></a><navclass="sub"><divclass="theme-picker hidden"><buttonid="theme-picker"aria-label="Pick another theme!"aria-haspopup="menu"title="themes"><imgwidth="18"height="18"alt="Pick another theme!"src="../../../brush.svg"></button><divid="theme-choices"role="menu"></div></div><formclass="search-form"><divclass="search-container"><div>
<inputclass="search-input"name="search"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"></div><buttontype="button"id="help-button"title="help">?</button><aid="settings-menu"href="../../../settings.html"title="settings"><imgwidth="18"height="18"alt="Change settings"src="../../../wheel.svg"></a></div></form></nav></div><sectionid="main-content"class="content"><divclass="main-heading">
<h1class="fqn"><spanclass="in-band">Module <ahref="../../index.html">os</a>::<wbr><ahref="../index.html">task</a>::<wbr><aclass="mod"href="#">process</a><buttonid="copy-path"onclick="copy_path(this)"title="Copy item path to clipboard"><imgsrc="../../../clipboard.svg"width="19"height="18"alt="Copy item path"></button></span></h1><spanclass="out-of-band"><aclass="srclink"href="../../../src/os/task/process.rs.html#1-273" title="goto source code">source</a> · <aid="toggle-all-docs"href="javascript:void(0)"title="collapse all docs">[<spanclass="inner">−</span>]</a></span></div><h2id="structs"class="small-section-header"><ahref="#structs">Structs</a></h2>
<h1class="fqn"><spanclass="in-band">Module <ahref="../../index.html">os</a>::<wbr><ahref="../index.html">task</a>::<wbr><aclass="mod"href="#">process</a><buttonid="copy-path"onclick="copy_path(this)"title="Copy item path to clipboard"><imgsrc="../../../clipboard.svg"width="19"height="18"alt="Copy item path"></button></span></h1><spanclass="out-of-band"><aclass="srclink"href="../../../src/os/task/process.rs.html#1-284" title="goto source code">source</a> · <aid="toggle-all-docs"href="javascript:void(0)"title="collapse all docs">[<spanclass="inner">−</span>]</a></span></div><h2id="structs"class="small-section-header"><ahref="#structs">Structs</a></h2>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.fork"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../../src/os/task/process.rs.html#201-268" title="goto source code">source</a></div><ahref="#method.fork"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.fork"class="fnname">fork</a>(self: &<aclass="struct"href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"title="struct alloc::sync::Arc">Arc</a><Self>) -><aclass="struct"href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"title="struct alloc::sync::Arc">Arc</a><Self></h4></div></summary><divclass="docblock"><p>Only support processes with a single thread.</p>
</div></details><divid="method.getpid"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../../src/os/task/process.rs.html#270-272" title="goto source code">source</a></div><ahref="#method.getpid"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.getpid"class="fnname">getpid</a>(&self) -><aclass="primitive"href="https://doc.rust-lang.org/nightly/core/primitive.usize.html">usize</a></h4></div></div></details><h2id="synthetic-implementations"class="small-section-header">Auto Trait Implementations<ahref="#synthetic-implementations"class="anchor"></a></h2><divid="synthetic-implementations-list"><divid="impl-RefUnwindSafe"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-RefUnwindSafe"class="anchor"></a><h3class="code-header in-band">impl !<aclass="trait"href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html"title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Send"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Send"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html"title="trait core::marker::Send">Send</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Sync"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Sync"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html"title="trait core::marker::Sync">Sync</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Unpin"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Unpin"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html"title="trait core::marker::Unpin">Unpin</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-UnwindSafe"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-UnwindSafe"class="anchor"></a><h3class="code-header in-band">impl !<aclass="trait"href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html"title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div></div><h2id="blanket-implementations"class="small-section-header">Blanket Implementations<ahref="#blanket-implementations"class="anchor"></a></h2><divid="blanket-implementations-list"><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-Any"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#132-136"title="goto source code">source</a></div><ahref="#impl-Any"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html"title="trait core::any::Any">Any</a> for T <spanclass="where fmt-newline">where<br> T: 'static + ?<aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.type_id"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#133"title="goto source code">source</a></div><ahref="#method.type_id"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id"class="fnname">type_id</a>(&self) -><aclass="struct"href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html"title="struct core::any::TypeId">TypeId</a></h4></div></summary><divclass='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <ahref="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.fork"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../../src/os/task/process.rs.html#202-279" title="goto source code">source</a></div><ahref="#method.fork"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.fork"class="fnname">fork</a>(self: &<aclass="struct"href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"title="struct alloc::sync::Arc">Arc</a><Self>) -><aclass="struct"href="https://doc.rust-lang.org/nightly/alloc/sync/struct.Arc.html"title="struct alloc::sync::Arc">Arc</a><Self></h4></div></summary><divclass="docblock"><p>Only support processes with a single thread.</p>
</div></details><divid="method.getpid"class="method has-srclink"><divclass="rightside"><aclass="srclink"href="../../../src/os/task/process.rs.html#281-283" title="goto source code">source</a></div><ahref="#method.getpid"class="anchor"></a><h4class="code-header">pub fn <ahref="#method.getpid"class="fnname">getpid</a>(&self) -><aclass="primitive"href="https://doc.rust-lang.org/nightly/core/primitive.usize.html">usize</a></h4></div></div></details><h2id="synthetic-implementations"class="small-section-header">Auto Trait Implementations<ahref="#synthetic-implementations"class="anchor"></a></h2><divid="synthetic-implementations-list"><divid="impl-RefUnwindSafe"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-RefUnwindSafe"class="anchor"></a><h3class="code-header in-band">impl !<aclass="trait"href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.RefUnwindSafe.html"title="trait core::panic::unwind_safe::RefUnwindSafe">RefUnwindSafe</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Send"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Send"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Send.html"title="trait core::marker::Send">Send</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Sync"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Sync"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sync.html"title="trait core::marker::Sync">Sync</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-Unpin"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-Unpin"class="anchor"></a><h3class="code-header in-band">impl <aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Unpin.html"title="trait core::marker::Unpin">Unpin</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div><divid="impl-UnwindSafe"class="impl has-srclink"><divclass="rightside"></div><ahref="#impl-UnwindSafe"class="anchor"></a><h3class="code-header in-band">impl !<aclass="trait"href="https://doc.rust-lang.org/nightly/core/panic/unwind_safe/trait.UnwindSafe.html"title="trait core::panic::unwind_safe::UnwindSafe">UnwindSafe</a> for <aclass="struct"href="struct.ProcessControlBlock.html"title="struct os::task::process::ProcessControlBlock">ProcessControlBlock</a></h3></div></div><h2id="blanket-implementations"class="small-section-header">Blanket Implementations<ahref="#blanket-implementations"class="anchor"></a></h2><divid="blanket-implementations-list"><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-Any"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#132-136"title="goto source code">source</a></div><ahref="#impl-Any"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/nightly/core/any/trait.Any.html"title="trait core::any::Any">Any</a> for T <spanclass="where fmt-newline">where<br> T: 'static + ?<aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.type_id"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/any.rs.html#133"title="goto source code">source</a></div><ahref="#method.type_id"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id"class="fnname">type_id</a>(&self) -><aclass="struct"href="https://doc.rust-lang.org/nightly/core/any/struct.TypeId.html"title="struct core::any::TypeId">TypeId</a></h4></div></summary><divclass='docblock'><p>Gets the <code>TypeId</code> of <code>self</code>. <ahref="https://doc.rust-lang.org/nightly/core/any/trait.Any.html#tymethod.type_id">Read more</a></p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-Borrow%3CT%3E"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#209-214"title="goto source code">source</a></div><ahref="#impl-Borrow%3CT%3E"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html"title="trait core::borrow::Borrow">Borrow</a><T> for T <spanclass="where fmt-newline">where<br> T: ?<aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.borrow"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#211"title="goto source code">source</a></div><ahref="#method.borrow"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow"class="fnname">borrow</a>(&self) -><aclass="primitive"href="https://doc.rust-lang.org/nightly/core/primitive.reference.html">&</a>T</h4></div></summary><divclass='docblock'><p>Immutably borrows from an owned value. <ahref="https://doc.rust-lang.org/nightly/core/borrow/trait.Borrow.html#tymethod.borrow">Read more</a></p>
</div></details></div></details><detailsclass="rustdoc-toggle implementors-toggle"open><summary><divid="impl-BorrowMut%3CT%3E"class="impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#218-222"title="goto source code">source</a></div><ahref="#impl-BorrowMut%3CT%3E"class="anchor"></a><h3class="code-header in-band">impl<T><aclass="trait"href="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html"title="trait core::borrow::BorrowMut">BorrowMut</a><T> for T <spanclass="where fmt-newline">where<br> T: ?<aclass="trait"href="https://doc.rust-lang.org/nightly/core/marker/trait.Sized.html"title="trait core::marker::Sized">Sized</a>, </span></h3></div></summary><divclass="impl-items"><detailsclass="rustdoc-toggle method-toggle"open><summary><divid="method.borrow_mut"class="method trait-impl has-srclink"><divclass="rightside"><aclass="srclink"href="https://doc.rust-lang.org/nightly/src/core/borrow.rs.html#219"title="goto source code">source</a></div><ahref="#method.borrow_mut"class="anchor"></a><h4class="code-header">pub fn <ahref="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut"class="fnname">borrow_mut</a>(&mut self) -><aclass="primitive"href="https://doc.rust-lang.org/nightly/core/primitive.reference.html">&mut </a>T</h4></div></summary><divclass='docblock'><p>Mutably borrows from an owned value. <ahref="https://doc.rust-lang.org/nightly/core/borrow/trait.BorrowMut.html#tymethod.borrow_mut">Read more</a></p>
<noscript><linkrel="stylesheet"href="../../../noscript.css"></noscript><linkrel="alternate icon"type="image/png"href="../../../favicon-16x16.png"><linkrel="alternate icon"type="image/png"href="../../../favicon-32x32.png"><linkrel="icon"type="image/svg+xml"href="../../../favicon.svg"></head><bodyclass="rustdoc mod"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><navclass="sidebar"><divclass="sidebar-menu"role="button">☰</div><aclass="sidebar-logo"href="../../../os/index.html"><divclass="logo-container"><imgclass="rust-logo"src="../../../rust-logo.svg"alt="logo"></div>
</a><h2class="location"><ahref="#">Module task</a></h2><divclass="sidebar-elems"><divclass="block items"><ul><li><ahref="#structs">Structs</a></li><li><ahref="#enums">Enums</a></li></ul></div><divid="sidebar-vars"data-name="task"data-ty="mod"data-relpath="./"></div><scriptdefersrc="./sidebar-items.js"></script></div></nav><main><divclass="width-limiter"><divclass="sub-container"><aclass="sub-logo-container"href="../../../os/index.html"><imgclass="rust-logo"src="../../../rust-logo.svg"alt="logo"></a><navclass="sub"><divclass="theme-picker hidden"><buttonid="theme-picker"aria-label="Pick another theme!"aria-haspopup="menu"title="themes"><imgwidth="18"height="18"alt="Pick another theme!"src="../../../brush.svg"></button><divid="theme-choices"role="menu"></div></div><formclass="search-form"><divclass="search-container"><div>
<inputclass="search-input"name="search"autocomplete="off"spellcheck="false"placeholder="Click or press ‘S’ to search, ‘?’ for more options…"type="search"></div><buttontype="button"id="help-button"title="help">?</button><aid="settings-menu"href="../../../settings.html"title="settings"><imgwidth="18"height="18"alt="Change settings"src="../../../wheel.svg"></a></div></form></nav></div><sectionid="main-content"class="content"><divclass="main-heading">
<h1class="fqn"><spanclass="in-band">Module <ahref="../../index.html">os</a>::<wbr><ahref="../index.html">task</a>::<wbr><aclass="mod"href="#">task</a><buttonid="copy-path"onclick="copy_path(this)"title="Copy item path to clipboard"><imgsrc="../../../clipboard.svg"width="19"height="18"alt="Copy item path"></button></span></h1><spanclass="out-of-band"><aclass="srclink"href="../../../src/os/task/task.rs.html#1-79" title="goto source code">source</a> · <aid="toggle-all-docs"href="javascript:void(0)"title="collapse all docs">[<spanclass="inner">−</span>]</a></span></div><h2id="structs"class="small-section-header"><ahref="#structs">Structs</a></h2>
<h1class="fqn"><spanclass="in-band">Module <ahref="../../index.html">os</a>::<wbr><ahref="../index.html">task</a>::<wbr><aclass="mod"href="#">task</a><buttonid="copy-path"onclick="copy_path(this)"title="Copy item path to clipboard"><imgsrc="../../../clipboard.svg"width="19"height="18"alt="Copy item path"></button></span></h1><spanclass="out-of-band"><aclass="srclink"href="../../../src/os/task/task.rs.html#1-80" title="goto source code">source</a> · <aid="toggle-all-docs"href="javascript:void(0)"title="collapse all docs">[<spanclass="inner">−</span>]</a></span></div><h2id="structs"class="small-section-header"><ahref="#structs">Structs</a></h2>
<spanclass="comment">// add main thread to scheduler</span>
<spanclass="macro">kprintln!</span>(<spanclass="string">"[KERN] task::process::new(): add_task(task): add main thread to tscheduler"</span>);
<spanclass="macro">kprintln!</span>(<spanclass="string">"[KERN] task::process::new(): add_task(task): add main thread to scheduler"</span>);
<spanclass="comment">// create child process pcb</span>
<spanclass="macro">kprintln!</span>(<spanclass="string">"[KERN] task::process::fork(): new child PCB with new pid, memory_set, fd_table, ..."</span>);
<spanclass="comment">// create main thread of child process</span>
<spanclass="macro">kprintln!</span>(<spanclass="string">"[KERN] task::process::fork(): TaskControlBlock::new(): create main thread of child process"</span>);
<spanclass="comment">// modify kstack_top in trap_cx of this thread</span>
<spanclass="macro">kprintln!</span>(<spanclass="string">"[KERN] task::process::fork(): modify child's kstack_top in trap_cx of child"</span>);