<span> 1</span> #include <span>"</span><span>windows.h</span><span>"</span><span> 2</span> #include <span>"</span><span>iostream</span><span>"</span><span> 3</span> #include <span>"</span><span>stdio.h</span><span>"</span><span> 4</span><span>using</span><span>namespace</span><span> std;
</span><span> 5</span><span> 6</span><span>static</span> LPCTSTR q_szMutexName=<span>"</span><span>w2kdg.ProcTerm.mutex.Suicide</span><span>"</span><span>;
</span><span> 7</span><span> 8</span><span>HANDLE StartClone(){
</span><span> 9</span><span> TCHAR szFilename[MAX_PATH];
</span><span>10</span><span> GetModuleFileName(NULL,szFilename,MAX_PATH);
</span><span>11</span><span>12</span><span> TCHAR szCmdLine[MAX_PATH];
</span><span>13</span> sprintf_s(szCmdLine,""%s" "child"",szFilename);<span>14</span><span>15</span><span> STARTUPINFO si;
</span><span>16</span><span>17</span> ZeroMemory(reinterpret_cast<<span>void</span>*>(&si),<span>sizeof</span><span>(si));
</span><span>18</span> si.cb=<span>sizeof</span><span>(si);
</span><span>19</span><span> PROCESS_INFORMATION pi;
</span><span>20</span><span>21</span> BOOL bCreateOK=<span>CreateProcess(
</span><span>22</span><span> szFilename,
</span><span>23</span><span> szCmdLine,
</span><span>24</span><span> NULL,
</span><span>25</span><span> NULL,
</span><span>26</span><span> FALSE,
</span><span>27</span><span> CREATE_NEW_CONSOLE,
</span><span>28</span><span> NULL,
</span><span>29</span><span> NULL,
</span><span>30</span> &<span>si,
</span><span>31</span> &<span>pi
</span><span>32</span><span> );
</span><span>33</span><span>34</span><span>if</span><span>(bCreateOK){
</span><span>35</span><span> CloseHandle(pi.hProcess);
</span><span>36</span><span> CloseHandle(pi.hThread);
</span><span>37</span><span>return</span><span> pi.hProcess;
</span><span>38</span><span> }
</span><span>39</span><span>40</span><span>else</span><span>return</span><span> INVALID_HANDLE_VALUE;
</span><span>41</span><span>}
</span><span>42</span><span>43</span><span>void</span><span> Parent(){
</span><span>44</span> cout<<<span>"</span><span>Creating the child process and waited child process to quit.</span><span>"</span><<<span>endl;
</span><span>45</span> HANDLE hchild=<span>StartClone();
</span><span>46</span><span>if</span>(hchild!=<span>INVALID_HANDLE_VALUE)
</span><span>47</span><span> {
</span><span>48</span><span> WaitForSingleObject(hchild,INFINITE);
</span><span>49</span> cout<<<span>"</span><span>The child process had quited.</span><span>"</span><<<span>endl;
</span><span>50</span><span>51</span><span> }
</span><span>52</span><span>53</span><span>else</span><span>54</span> cout<<<span>"</span><span>Create child process failed.</span><span>"</span><<<span>endl;
</span><span>55</span><span>}
</span><span>56</span><span>57</span><span>58</span><span>void</span><span> Child(){
</span><span>59</span> cout<<<span>"</span><span>Child id quiting</span><span>"</span><<<span>endl;
</span><span>60</span> Sleep(<span>5000</span><span>);
</span><span>61</span><span>62</span><span>}
</span><span>63</span><span>64</span><span>int</span> main(<span>int</span> argc,<span>char</span> *<span> argv[]){
</span><span>65</span><span>if</span>(argc><span>1</span>&&strcmp(argv[<span>1</span>],<span>"</span><span>child</span><span>"</span>)==<span>0</span><span>){
</span><span>66</span><span> Child();
</span><span>67</span><span> }
</span><span>68</span><span>else</span><span>{
</span><span>69</span><span> Parent();
</span><span>70</span><span> }
</span><span>71</span><span>return</span><span>0</span><span>;
</span><span>72</span><span>73</span> }
原文:http://www.cnblogs.com/593213556wuyubao/p/3733456.html
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!