diff options
Diffstat (limited to 'doc/html/boost_process/tutorial.html')
-rw-r--r-- | doc/html/boost_process/tutorial.html | 49 |
1 files changed, 20 insertions, 29 deletions
diff --git a/doc/html/boost_process/tutorial.html b/doc/html/boost_process/tutorial.html index 56868e0dc9..b774418c1f 100644 --- a/doc/html/boost_process/tutorial.html +++ b/doc/html/boost_process/tutorial.html @@ -170,18 +170,18 @@ </p> <pre class="programlisting"><code class="computeroutput"><a class="link" href="../boost/process/child.html" title="Class child">bp::child</a></code> <span class="identifier">c</span><span class="special">(</span><code class="computeroutput"><a class="link" href="../boost/process/search_path.html" title="Function search_path">bp::search_path</a></code><span class="special">(</span><span class="string">"g++"</span><span class="special">),</span> <span class="string">"main.cpp"</span><span class="special">);</span> -<span class="keyword">while</span> <span class="special">(</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201487136-bb">running</a></code><span class="special">())</span> +<span class="keyword">while</span> <span class="special">(</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675642256-bb">running</a></code><span class="special">())</span> <span class="identifier">do_some_stuff</span><span class="special">();</span> -<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code><span class="special">();</span> <span class="comment">//wait for the process to exit </span> -<span class="keyword">int</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201491552-bb">exit_code</a></code><span class="special">();</span> +<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code><span class="special">();</span> <span class="comment">//wait for the process to exit </span> +<span class="keyword">int</span> <span class="identifier">result</span> <span class="special">=</span> <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675646672-bb">exit_code</a></code><span class="special">();</span> </pre> <p> </p> <p> So we launch the process, by calling the child constructor. Then we check and do other things while the process is running and afterwards get the exit - code. The call to <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code> + code. The call to <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code> is necessary, to obtain it and tell the operating system, that no one is waiting for the process anymore. </p> @@ -191,7 +191,7 @@ <th align="left">Note</th> </tr> <tr><td align="left" valign="top"><p> - You can also wait for a time span or a until a time point with <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201480544-bb">wait_for</a></code> and <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201474160-bb">wait_until</a></code> + You can also wait for a time span or a until a time point with <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675635664-bb">wait_for</a></code> and <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675629280-bb">wait_until</a></code> </p></td></tr> </table></div> <div class="warning"><table border="0" summary="Warning"> @@ -201,7 +201,7 @@ </tr> <tr><td align="left" valign="top"><p> If you don't call wait on a child object, it will be terminated on destruction. - This can be avoided by calling <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201496528-bb">detach</a></code> + This can be avoided by calling <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675651648-bb">detach</a></code> beforehand </p></td></tr> </table></div> @@ -285,10 +285,10 @@ <a href="http://en.cppreference.com/w/cpp/container/vector" target="_top">std::vector</a><span class="special"><</span><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span><span class="special">></span> <span class="identifier">data</span><span class="special">;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">line</span><span class="special">;</span> - <span class="keyword">while</span> <span class="special">(</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201487136-bb">running</a></code><span class="special">()</span> <span class="special">&&</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">getline</span><span class="special">(</span><span class="identifier">is</span><span class="special">,</span> <span class="identifier">line</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">line</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span> + <span class="keyword">while</span> <span class="special">(</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675642256-bb">running</a></code><span class="special">()</span> <span class="special">&&</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">getline</span><span class="special">(</span><span class="identifier">is</span><span class="special">,</span> <span class="identifier">line</span><span class="special">)</span> <span class="special">&&</span> <span class="special">!</span><span class="identifier">line</span><span class="special">.</span><span class="identifier">empty</span><span class="special">())</span> <span class="identifier">data</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">line</span><span class="special">);</span> - <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code><span class="special">();</span> + <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code><span class="special">();</span> <span class="keyword">return</span> <span class="identifier">data</span><span class="special">;</span> <span class="special">}</span> @@ -299,15 +299,6 @@ What this does is redirect the <code class="computeroutput"><span class="identifier">stdout</span></code> of the process into a pipe and we read this synchronously. </p> -<div class="warning"><table border="0" summary="Warning"> -<tr> -<td rowspan="2" align="center" valign="top" width="25"><img alt="[Warning]" src="../../../doc/src/images/warning.png"></td> -<th align="left">Warning</th> -</tr> -<tr><td align="left" valign="top"><p> - The pipe will cause a deadlock if you try to read after nm exited - </p></td></tr> -</table></div> <div class="note"><table border="0" summary="Note"> <tr> <td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../doc/src/images/note.png"></td> @@ -334,7 +325,7 @@ <span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">value</span><span class="special">;</span> <span class="identifier">out</span> <span class="special">>></span> <span class="identifier">value</span><span class="special">;</span> -<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201460400-bb">terminate</a></code><span class="special">();</span> +<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675615520-bb">terminate</a></code><span class="special">();</span> </pre> <p> </p> @@ -359,7 +350,7 @@ <span class="keyword">while</span> <span class="special">(</span><span class="identifier">filt</span><span class="special">.</span><span class="identifier">running</span><span class="special">()</span> <span class="special">&&</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">getline</span><span class="special">(</span><span class="identifier">is</span><span class="special">,</span> <span class="identifier">line</span><span class="special">))</span> <span class="comment">//when nm finished the pipe closes and c++filt exits</span> <span class="identifier">outline</span><span class="special">.</span><span class="identifier">push_back</span><span class="special">(</span><span class="identifier">line</span><span class="special">);</span> - <span class="identifier">nm</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code><span class="special">();</span> + <span class="identifier">nm</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code><span class="special">();</span> <span class="identifier">filt</span><span class="special">.</span><span class="identifier">wait</span><span class="special">();</span> <span class="special">}</span> </pre> @@ -433,7 +424,7 @@ <tr><td align="left" valign="top"><p> Passing an instance of <a href="http://www.boost.org/doc/libs/release/doc/html/boost_asio/reference/io_service.html" target="_top">boost::asio::io_service</a> to the launching function automatically cause it to wait asynchronously - for the exit, so no call of <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code> + for the exit, so no call of <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code> is needed </p></td></tr> </table></div> @@ -492,7 +483,7 @@ </ol></div> <p> If we have program like <code class="computeroutput"><span class="identifier">make</span></code>, - which does launch its own child processes, a call of <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201460400-bb">terminate</a></code> + which does launch its own child processes, a call of <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675615520-bb">terminate</a></code> might not suffice. I.e. if we have a makefile launching <code class="computeroutput"><span class="identifier">gcc</span></code> and use the following code, the <code class="computeroutput"><span class="identifier">gcc</span></code> process will still run afterwards: @@ -500,8 +491,8 @@ <p> </p> <pre class="programlisting"><code class="computeroutput"><a class="link" href="../boost/process/child.html" title="Class child">bp::child</a></code> <span class="identifier">c</span><span class="special">(</span><span class="string">"make"</span><span class="special">);</span> -<span class="keyword">if</span> <span class="special">(!</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201480544-bb">wait_for</a></code><span class="special">(</span><a href="http://en.cppreference.com/w/cpp/chrono/duration" target="_top">std::chrono::seconds</a><span class="special">(</span><span class="number">10</span><span class="special">))</span> <span class="comment">//give it 10 seconds</span> - <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201460400-bb">terminate</a></code><span class="special">();</span> <span class="comment">//then terminate</span> +<span class="keyword">if</span> <span class="special">(!</span><span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675635664-bb">wait_for</a></code><span class="special">(</span><a href="http://en.cppreference.com/w/cpp/chrono/duration" target="_top">std::chrono::seconds</a><span class="special">(</span><span class="number">10</span><span class="special">))</span> <span class="comment">//give it 10 seconds</span> + <span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675615520-bb">terminate</a></code><span class="special">();</span> <span class="comment">//then terminate</span> </pre> <p> </p> @@ -513,15 +504,15 @@ </p> <pre class="programlisting"><code class="computeroutput"><a class="link" href="../boost/process/group.html" title="Class group">bp::group</a></code> <span class="identifier">g</span><span class="special">;</span> <code class="computeroutput"><a class="link" href="../boost/process/child.html" title="Class child">bp::child</a></code> <span class="identifier">c</span><span class="special">(</span><span class="string">"make"</span><span class="special">,</span> <span class="identifier">g</span><span class="special">);</span> -<span class="keyword">if</span> <span class="special">(!</span><span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45837200959088-bb">wait_for</a></code><span class="special">(</span><a href="http://en.cppreference.com/w/cpp/chrono/duration" target="_top">std::chrono::seconds</a><span class="special">(</span><span class="number">10</span><span class="special">))</span> - <span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45837200938912-bb">terminate</a></code><span class="special">();</span> +<span class="keyword">if</span> <span class="special">(!</span><span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45477675112592-bb">wait_for</a></code><span class="special">(</span><a href="http://en.cppreference.com/w/cpp/chrono/duration" target="_top">std::chrono::seconds</a><span class="special">(</span><span class="number">10</span><span class="special">))</span> + <span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45477675092416-bb">terminate</a></code><span class="special">();</span> -<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code><span class="special">();</span> <span class="comment">//to avoid a zombie process & get the exit code</span> +<span class="identifier">c</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code><span class="special">();</span> <span class="comment">//to avoid a zombie process & get the exit code</span> </pre> <p> </p> <p> - Now given the example, we still call <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45837201483840-bb">wait</a></code> + Now given the example, we still call <code class="computeroutput"><a class="link" href="../boost/process/child.html#idm45477675638960-bb">wait</a></code> to avoid a zombie process. An easier solution for that might be to use <code class="computeroutput"><a class="link" href="../boost/process/spawn.html" title="Function template spawn">spawn</a></code>. </p> <p> @@ -539,7 +530,7 @@ <span class="identifier">do_something</span><span class="special">();</span> - <span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45837200962592-bb">wait</a></code><span class="special">();</span> + <span class="identifier">g</span><span class="special">.</span><code class="computeroutput"><a class="link" href="../boost/process/group.html#idm45477675116096-bb">wait</a></code><span class="special">();</span> <span class="special">};</span> </pre> <p> @@ -565,7 +556,7 @@ <p> </p> <pre class="programlisting"><span class="comment">//get a handle to the current environment</span> -<span class="keyword">auto</span> <span class="identifier">env</span> <span class="special">=</span> <code class="computeroutput"><a class="link" href="../process/reference.html#boost.this_process.environment">boost::this_process::environment</a></code><span class="special">();</span> +<span class="keyword">auto</span> <span class="identifier">env</span> <span class="special">=</span> <code class="computeroutput"><a class="link" href="../process/reference.html#boost.this_process.environment">boost::this_process:deadlock :environment</a></code><span class="special">();</span> <span class="comment">//add a variable to the current environment</span> <span class="identifier">env</span><span class="special">[</span><span class="string">"VALUE_1"</span><span class="special">]</span> <span class="special">=</span> <span class="string">"foo"</span><span class="special">;</span> |