java - SIGINT 信号无法用循环终止 java 进程
问题描述
kill -SIGINT <pid>
没有用给定的特定代码杀死我的 java 进程。Ctrl+C 都不起作用。我有以下java代码。
代码1:
class LoopTest {
public static void main(String[] args) throws Exception {
System.out.println("---start---");
countPrimes();
System.out.println("---end---");
}
public static void countPrimes() {
for (int i = 2; i < 10000000 ; i++) {
for (int j = 2; j < i ; j++) {
int x = i % j;
}
}
}
}
带有上述代码的 Java 进程运行了很长时间,如果我通过命令杀死这个 Java 进程
kill -SIGINT <pid>
无法终止进程。
但是,如果使用无限循环运行以下代码
代码2:
class LoopTest {
public static void main(String[] args) throws Exception {
System.out.println("---start---");
countPrimes();
System.out.println("---end---");
}
public static void countPrimes() {
for (int i = 2; true ; i++) {
for (int j = 2; j < i ; j++) {
int x = i % j;
}
}
}
}
或者如果我运行这个简单的代码
代码3:
class LoopTest {
public static void main(String[] args) throws Exception {
System.out.println("---start---");
countPrimes();
System.out.println("---end---");
}
public static void countPrimes() {
while(true){}
}
}
对于上面的 CODE2 和 CODE3,我都可以用 command 杀死 java 进程kill -SIGINT <pid>
。CODE1 有什么问题?或者为什么运行 CODE1 的 java 进程不能被 SIGINT 信号杀死?
请注意:我可以使用 command 杀死所有进程kill -SIGKILL <pid>
。但我的问题是针对SIGINT信号的。
解决方案
推荐阅读
- c++ - C++ 使用带有 fstream 的 if 语句?
- python - vscode 找不到 python 的 requests 库
- c# - 在 C# 中获取没有管理员权限的进程路径
- java - java代码中的越界异常,需要帮助(初学者)
- tla+ - 指定活性,这样 TLA+ 中就不会发生循环
- android - ARCore 发布图片导致崩溃
- java - 在 android 中创建 ViewModel doubles 以使用 espresso 单独测试片段
- java - Assign unique ID for every new Class (not instance!)
- python - Numpy 根据两个数组给出的不同起始索引在两个轴上切片固定长度
- php - 在 null laravel 7 上调用成员函数 store()