Scala:如何防止子进程接收CTRL + C / Control + C / SIGINT

时间:2017-01-20 10:43:55

标签: scala jvm subprocess signals sigint

我的Scala脚本创建了这样的子进程:

"mvn clean package"

命令是例如"sleep 20"或测试此问题Signal.handle(new Signal("INT"), this) override def handle(sig: Signal) { log.warn("Ignoring SIGINT (Ctrl+C). Press [Esc] instead.") }

由于某些原因,我的脚本必须拦截SIGINT,因为用户可能意味着“复制”而不是“停止”(实际上不时发生)。我通过添加如下信号处理程序来实现这一目标:

    <ul class="subjects">
        <?php
        // 3. Use returned data ( if any )
        while($subject=mysqli_fetch_assoc($subject_set)){
            ?>
            <?php
                  echo "<li ";
                  if ($subject["id"]==$selected_subject_id){
                      echo "class=\"selected\"";
                  }

                  echo ">"
            ?>
                <a href="manage_content.php?subject=<?php echo urlencode($subject["id"])  ?>"><?php echo $subject["menu_name"]; ?></a>
                <?php
                    $page_set=find_all_pages_for_subject($subject["id"]);
                ?>
                <ul class="pages">
                    <?php
                     while($page=mysqli_fetch_assoc($page_set)){
                    ?>
                         <?php
                         echo "<li ";
                         if ($page["id"]==$selected_page_id){
                             echo "class=\"selected\"";
                         }

                         echo ">"
                         ?>
                        <a href="manage_content.php?page=<?php echo $page["id"] ?>"><?php echo $page["menu_name"];  ?></a>
                    </li>
                         <?php
                     }
                    ?>
                    <?php
                    //4. Release returned data
                    mysqli_free_result($page_set);
                    ?>
                </ul>
            </li>

            <?php
        }
        ?>
    </ul>

但是当子进程运行时,这不起作用,因为CTRL + C使其停止。我该怎么做才能使子进程忽略SIGINT?我找到了Python的解决方案: Python: How to prevent subprocesses from receiving CTRL-C / Control-C / SIGINT Scala有类似的东西吗?

1 个答案:

答案 0 :(得分:1)

自启动bash以来,您可以使用trap内置命令忽略子流程中的信号。

只需将trap '' SIGINT;(带分号)添加到command

Process(Seq("bash", "-c", "trap '' SIGINT;" + command))