Lab2.html 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <!DOCTYPE html>
  2. <html lang="en-US">
  3. <head>
  4. <meta charset="utf-8">
  5. <meta name="viewport" content="width=device-width,initial-scale=1">
  6. <title>进程创建与进程间通信 | 操作系统实验</title>
  7. <meta name="generator" content="VuePress 1.9.10">
  8. <meta name="description" content="Welcome!">
  9. <link rel="preload" href="/OS_lab_tutorial/assets/css/0.styles.dbcc0abd.css" as="style"><link rel="preload" href="/OS_lab_tutorial/assets/js/app.548e512b.js" as="script"><link rel="preload" href="/OS_lab_tutorial/assets/js/2.a10c1015.js" as="script"><link rel="preload" href="/OS_lab_tutorial/assets/js/1.2eb350fb.js" as="script"><link rel="preload" href="/OS_lab_tutorial/assets/js/47.4b539e31.js" as="script"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/10.9c4a3d6a.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/11.c9b949dd.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/12.7a6f47e2.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/13.fbdc9172.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/14.75eeae5c.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/15.10230a03.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/16.d211645d.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/17.8aa5ccb7.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/18.f646c752.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/19.2299b1be.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/20.dd2299aa.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/21.54d7136c.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/22.27de1aab.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/23.e6adf6f4.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/24.7144c571.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/25.c03fcfe6.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/26.ffb9fe57.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/27.f7b2825d.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/28.8f03b318.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/29.8cb3c66f.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/3.e8824fe3.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/30.bf9e4276.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/31.8766f540.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/32.6fa5f877.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/33.731649e6.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/34.a3e96ad1.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/35.89bf4f72.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/36.bbc2f5d5.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/37.6b5734d9.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/38.20a388a9.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/39.3226df7c.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/4.0c822be5.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/40.4379c635.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/41.cb39a504.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/42.755dfe9e.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/43.9435c22d.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/44.d3557ca7.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/45.8134401a.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/46.3a14ff68.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/48.0db8ee20.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/49.d2e78ac9.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/5.fb9e399b.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/50.5b384f99.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/51.a5a622d0.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/52.a05f43bb.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/53.6ecce7af.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/54.1230dd30.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/55.a6f99944.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/56.b6906e64.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/57.c07e7fa9.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/58.44ca2e38.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/59.321c75fa.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/6.1235e1cf.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/60.232b0204.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/61.10b5a74b.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/62.fb27577d.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/63.b9d7de0c.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/64.340bfb3e.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/65.af067ecd.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/66.483873e9.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/7.da280d86.js"><link rel="prefetch" href="/OS_lab_tutorial/assets/js/vendors~docsearch.857e8e87.js">
  10. <link rel="stylesheet" href="/OS_lab_tutorial/assets/css/0.styles.dbcc0abd.css">
  11. </head>
  12. <body>
  13. <div id="app" data-server-rendered="true"><div class="theme-container"><header class="navbar"><div class="sidebar-button"><svg xmlns="http://www.w3.org/2000/svg" aria-hidden="true" role="img" viewBox="0 0 448 512" class="icon"><path fill="currentColor" d="M436 124H12c-6.627 0-12-5.373-12-12V80c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12zm0 160H12c-6.627 0-12-5.373-12-12v-32c0-6.627 5.373-12 12-12h424c6.627 0 12 5.373 12 12v32c0 6.627-5.373 12-12 12z"></path></svg></div> <a href="/OS_lab_tutorial/" class="home-link router-link-active"><!----> <span class="site-name">操作系统实验</span></a> <div class="links"><div class="search-box"><input aria-label="Search" autocomplete="off" spellcheck="false" value=""> <!----></div> <nav class="nav-links can-hide"><div class="nav-item"><a href="/OS_lab_tutorial/" class="nav-link">
  14. 首页
  15. </a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Linux" class="dropdown-title"><span class="title">Linux</span> <span class="arrow down"></span></button> <button type="button" aria-label="Linux" class="mobile-dropdown-title"><span class="title">Linux</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
  16. 实验教程
  17. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab1.html" class="nav-link">
  18. 实验1-熟悉类Linux系统
  19. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab2.html" class="nav-link">
  20. 实验2-进程创建与进程间通信
  21. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab3/" class="nav-link">
  22. 实验3-进程调度算法
  23. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab4/" class="nav-link">
  24. 实验4-存储管理算法
  25. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab5.html" class="nav-link">
  26. 实验5-文件管理系统
  27. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab6.html" class="nav-link">
  28. 实验6-网络编程(暂定)
  29. </a></li></ul></li><li class="dropdown-item"><h4>
  30. 课程练习
  31. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab1.html" class="nav-link">
  32. 实验1-熟悉类Linux系统
  33. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html" aria-current="page" class="nav-link router-link-exact-active router-link-active">
  34. 实验2-进程创建与进程间通信
  35. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab3.html" class="nav-link">
  36. 实验3-进程调度算法
  37. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab4.html" class="nav-link">
  38. 实验4-存储管理算法
  39. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab5.html" class="nav-link">
  40. 实验5-文件管理系统
  41. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab6.html" class="nav-link">
  42. 实验6-网络编程(暂定)
  43. </a></li></ul></li><li class="dropdown-item"><h4>
  44. 附录
  45. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab1.html" class="nav-link">
  46. 实验1-熟悉类Linux系统
  47. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab2.html" class="nav-link">
  48. 实验2-进程创建与进程间通信
  49. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab3.html" class="nav-link">
  50. 实验3-进程调度算法
  51. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab4.html" class="nav-link">
  52. 实验4-存储管理算法
  53. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab5.html" class="nav-link">
  54. 实验5-文件管理系统
  55. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab6.html" class="nav-link">
  56. 实验6-网络编程(暂定)
  57. </a></li></ul></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="DragonOS" class="dropdown-title"><span class="title">DragonOS</span> <span class="arrow down"></span></button> <button type="button" aria-label="DragonOS" class="mobile-dropdown-title"><span class="title">DragonOS</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
  58. 实验教程
  59. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Lab/Lab1.html" class="nav-link">
  60. 实验-文件系统
  61. </a></li></ul></li><li class="dropdown-item"><h4>
  62. 课程练习
  63. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Assignment/Lab1.html" class="nav-link">
  64. 实验-文件系统
  65. </a></li></ul></li><li class="dropdown-item"><h4>
  66. 附录
  67. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Appendix/Lab1.html" class="nav-link">
  68. 实验-文件系统
  69. </a></li></ul></li></ul></div></div> <!----></nav></div></header> <div class="sidebar-mask"></div> <aside class="sidebar"><nav class="nav-links"><div class="nav-item"><a href="/OS_lab_tutorial/" class="nav-link">
  70. 首页
  71. </a></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="Linux" class="dropdown-title"><span class="title">Linux</span> <span class="arrow down"></span></button> <button type="button" aria-label="Linux" class="mobile-dropdown-title"><span class="title">Linux</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
  72. 实验教程
  73. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab1.html" class="nav-link">
  74. 实验1-熟悉类Linux系统
  75. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab2.html" class="nav-link">
  76. 实验2-进程创建与进程间通信
  77. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab3/" class="nav-link">
  78. 实验3-进程调度算法
  79. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab4/" class="nav-link">
  80. 实验4-存储管理算法
  81. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab5.html" class="nav-link">
  82. 实验5-文件管理系统
  83. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Lab/Lab6.html" class="nav-link">
  84. 实验6-网络编程(暂定)
  85. </a></li></ul></li><li class="dropdown-item"><h4>
  86. 课程练习
  87. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab1.html" class="nav-link">
  88. 实验1-熟悉类Linux系统
  89. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html" aria-current="page" class="nav-link router-link-exact-active router-link-active">
  90. 实验2-进程创建与进程间通信
  91. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab3.html" class="nav-link">
  92. 实验3-进程调度算法
  93. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab4.html" class="nav-link">
  94. 实验4-存储管理算法
  95. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab5.html" class="nav-link">
  96. 实验5-文件管理系统
  97. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Assignment/Lab6.html" class="nav-link">
  98. 实验6-网络编程(暂定)
  99. </a></li></ul></li><li class="dropdown-item"><h4>
  100. 附录
  101. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab1.html" class="nav-link">
  102. 实验1-熟悉类Linux系统
  103. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab2.html" class="nav-link">
  104. 实验2-进程创建与进程间通信
  105. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab3.html" class="nav-link">
  106. 实验3-进程调度算法
  107. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab4.html" class="nav-link">
  108. 实验4-存储管理算法
  109. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab5.html" class="nav-link">
  110. 实验5-文件管理系统
  111. </a></li><li class="dropdown-subitem"><a href="/OS_lab_tutorial/Linux/Appendix/Lab6.html" class="nav-link">
  112. 实验6-网络编程(暂定)
  113. </a></li></ul></li></ul></div></div><div class="nav-item"><div class="dropdown-wrapper"><button type="button" aria-label="DragonOS" class="dropdown-title"><span class="title">DragonOS</span> <span class="arrow down"></span></button> <button type="button" aria-label="DragonOS" class="mobile-dropdown-title"><span class="title">DragonOS</span> <span class="arrow right"></span></button> <ul class="nav-dropdown" style="display:none;"><li class="dropdown-item"><h4>
  114. 实验教程
  115. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Lab/Lab1.html" class="nav-link">
  116. 实验-文件系统
  117. </a></li></ul></li><li class="dropdown-item"><h4>
  118. 课程练习
  119. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Assignment/Lab1.html" class="nav-link">
  120. 实验-文件系统
  121. </a></li></ul></li><li class="dropdown-item"><h4>
  122. 附录
  123. </h4> <ul class="dropdown-subitem-wrapper"><li class="dropdown-subitem"><a href="/OS_lab_tutorial/DragonOS/Appendix/Lab1.html" class="nav-link">
  124. 实验-文件系统
  125. </a></li></ul></li></ul></div></div> <!----></nav> <ul class="sidebar-links"><li><section class="sidebar-group depth-0"><p class="sidebar-heading open"><span>进程创建与进程间通信</span> <!----></p> <ul class="sidebar-links sidebar-group-items"><li><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#本章导读" class="sidebar-link">本章导读</a><ul class="sidebar-sub-headers"></ul></li><li><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#实验内容" class="sidebar-link">实验内容</a><ul class="sidebar-sub-headers"><li class="sidebar-sub-header"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#进程创建" class="sidebar-link">进程创建</a></li><li class="sidebar-sub-header"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#创建进程树" class="sidebar-link">创建进程树</a></li><li class="sidebar-sub-header"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#信号通信" class="sidebar-link">信号通信</a></li><li class="sidebar-sub-header"><a href="/OS_lab_tutorial/Linux/Assignment/Lab2.html#管道通信" class="sidebar-link">管道通信</a></li></ul></li></ul></section></li></ul> </aside> <main class="page"> <div class="theme-default-content content__default"><h1 id="进程创建与进程间通信"><a href="#进程创建与进程间通信" class="header-anchor">#</a> 进程创建与进程间通信</h1> <h2 id="本章导读"><a href="#本章导读" class="header-anchor">#</a> 本章导读</h2> <p>通过练习理解进程创建以及进程并发执行的过程,握fork系统调用的方法,了解进程间通信的常用方法。</p> <h2 id="实验内容"><a href="#实验内容" class="header-anchor">#</a> 实验内容</h2> <h3 id="进程创建"><a href="#进程创建" class="header-anchor">#</a> 进程创建</h3> <p>请问在下方的代码中,一共有多少个进程被创建?</p> <blockquote><p>可以通过fork返回的值来判断当前进程是子进程还是父进程。</p></blockquote> <div class="language-c extra-class"><pre class="language-c"><code><span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;unistd.h&gt;</span></span>
  126. <span class="token macro property"><span class="token directive-hash">#</span><span class="token directive keyword">include</span> <span class="token string">&lt;stdio.h&gt;</span></span>
  127. <span class="token keyword">int</span> <span class="token function">main</span><span class="token punctuation">(</span><span class="token punctuation">)</span>
  128. <span class="token punctuation">{</span>
  129. <span class="token function">fork</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  130. <span class="token function">fork</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">&amp;&amp;</span> <span class="token function">fork</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">||</span> <span class="token function">fork</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  131. <span class="token function">fork</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  132. <span class="token function">sleep</span><span class="token punctuation">(</span><span class="token number">100</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
  133. <span class="token keyword">return</span> <span class="token number">0</span><span class="token punctuation">;</span>
  134. <span class="token punctuation">}</span>
  135. </code></pre></div><h3 id="创建进程树"><a href="#创建进程树" class="header-anchor">#</a> 创建进程树</h3> <p>编写程序创建进程树如图所示,在每个进程中显示当前进程标识getpid()和父进程标识getppid()。</p> <p><img src="/OS_lab_tutorial/docs/.vuepress/public/Linux/tree.png" alt="图片1" title="进程树"></p> <h3 id="信号通信"><a href="#信号通信" class="header-anchor">#</a> 信号通信</h3> <p>用fork()创建两个子进程,再用系统调用signal()让父进程捕捉键盘上来的中断信号(即DEL键);当捕捉到中断信号后,父进程用系统调用kill()向两个子进程发出信号,子进程捕捉到信号后分别输出下列信息后终止:</p> <p>Child process1 is killed by parent!</p> <p>Child process2 is killed by parent!</p> <p>父进程等待两个子进程终止后,输出如下的信息后终止:</p> <p>Parent process is killed!</p> <h3 id="管道通信"><a href="#管道通信" class="header-anchor">#</a> 管道通信</h3> <p>实现进程的管道通信,用系统调用pipe()建立一管道,二个子进程P1和P2分别向管道各写一句话:</p> <p>Child 1 is sending a message!</p> <p>Child 2 is sending a message!</p> <p>父进程从管道中读出二个来自子进程的信息并显示。</p></div> <footer class="page-edit"><!----> <!----></footer> <!----> </main></div><div class="global-ui"></div></div>
  136. <script src="/OS_lab_tutorial/assets/js/app.548e512b.js" defer></script><script src="/OS_lab_tutorial/assets/js/2.a10c1015.js" defer></script><script src="/OS_lab_tutorial/assets/js/1.2eb350fb.js" defer></script><script src="/OS_lab_tutorial/assets/js/47.4b539e31.js" defer></script>
  137. </body>
  138. </html>