我的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有类似的东西吗?
答案 0 :(得分:1)
自启动bash
以来,您可以使用trap
内置命令忽略子流程中的信号。
只需将trap '' SIGINT;
(带分号)添加到command
:
Process(Seq("bash", "-c", "trap '' SIGINT;" + command))