- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我有一个关于内核线程间信号传播的问题。场景是这样的:
从用户空间应用程序进行系统调用,内核在系统调用中创建一个线程(我们将其命名为 thread1)。
现在在那个线程 1 中,内核正在 while 循环中循环并且它被阻塞了。主线程也在 while 循环中循环。如果我执行“kill -9 <"user app pid>”,应用程序将无法正常退出。即使/proc 条目仍然存在。虽然/proc//fd 文件夹变空了。
如果我在主线程的 while 循环中放置以下代码,它会正确捕获信号并退出。如果我只在 thread1 的 while 循环中放入 following,主线程仍然不会退出。
if (signal_pending(current)) {
return;
}
您能否建议一下,在这种 kill -9 信号的情况下,内核应该如何表现?在 SIGKILL 之后,进程的状态变为 Zombie。
系统调用实现如下:
thread1 = kthread_create(thread_fn, NULL, "thread1");
if (thread1) {
wake_up_process(thread1);
}
printk(KERN_NOTICE "Main thread: current:%s\n", current->comm);
while(1) {
DELAY_SEC(1)
thread_fn 是:
int thread_fn(void* data)
{
while(1) {
DELAY_SEC(1)
}
}
问候,
索尼卡
最佳答案
向进程发送信号只是为此信号设置相应的标志。
当进程从内核模式返回时(例如,当系统调用返回时),将检查这些标志。如果之前设置了其中之一,则会采取相应的操作。
由于您的系统调用永远不会返回,所以这永远不会发生。
换句话说:您无法真正杀死 Linux 进程。你可以礼貌地让它死掉。
关于c - 阻塞的系统调用不会让 SIGKILL 终止进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16331536/
这个问题在这里已经有了答案: Use of undefined constant SIGTERM - > assumed 'SIGTERM' (1 个回答) 关闭 4 年前。 为什么我在某些 PHP
我有一个守护程序应用程序,它启动几个 3rd 方可执行文件(所有的都是封闭源代码和不可修改的)。 我想让所有子进程在父进程因任何原因退出时自动终止( 包括崩溃 )。 目前,我正在使用 prctl要实现
我在 iPhone 模拟器中构建并运行一个项目。我通过按主页按钮将其发送到后台。然后我双击主页按钮在后台找到我的应用程序并点击它。它变得活跃并且应用程序继续运行。在这里,无论我重复多少次,我都没有问题
我即将完成应用程序的开发。它有一个项目名称,但现在我即将将其发布到应用程序商店,我想更改名称。在项目文件检查器中执行此操作后,它向我展示了可以重命名的内容。我没有取消选择任何东西。重命名应用程序后,我
我是编码新手,我不确定为什么这段代码会出现此错误:运行时错误 (SIGKILL)。谢谢。该代码是朴素的 Dijkstra 算法。此代码在成批的测试用例上运行。因此是最外层的循环。样本输入:33 21
SIGKILL 是否在 unix 线程终止时被调用? 我正在监视一个可能正在使用线程池的应用程序,并使用 printf 注册一个 SIGKILL 处理程序,但没有显示任何内容。我试图了解是否涉及线程池
什么是 SIGKILL 权限策略? 我假设我无法在非 root 用户上运行时杀死内核或其他用户的某些内容,但我还没有找到任何关于此的文档。 最佳答案 来自 http://linux.die.net/m
我在 ios 模拟器中试验我的应用程序时发现,当我从多任务栏中删除它然后重新运行它时,它会产生 SIGKILL 信号。 (我通过停止该应用程序,运行另一个应用程序,然后从多任务栏中删除第一个应用程序并
即使在发出 SIGKILL 之后我也遇到过这种行为使用 kill -9该过程没有终止。这里有问题的命令是 cat # ps -ef | grep 19275 root 19275 1
如果 linux 进程正在等待 I/O(即它处于 SLEEP 状态)并且针对它发出 SIGKILL 信号,则在终止时( STOPPED 状态)是否会通过RUNNING 或READY 状态? 换句话说,
我试图弄清楚应用程序在收到 SIGTERM 时,在发送 SIGKILL 之前有多少时间退出? 我对这些信号知之甚少。我已经在 Stackoverflow 上的建议答案中阅读了其中的一些内容,但我无法瞥
我需要在收到任何终止命令(如 SIGTERM 和 SIGKILL)时写入日志文件。 我可以注册 SIGTERM 但如何处理 SIGKILL 信号? 最佳答案 你不能,至少不能因为进程被杀死。 您可以做
我正在开发一个使用共享内存的程序。所述程序的多个实例将连接到现有程序或重新创建它,并在没有其他进程时将其返回给操作系统,或者只是将其分离并终止。我想到了使用一个简单的计数器来跟踪有多少进程使用它。 我
我想知道是否有任何方法可以从 OOM killer 那里捕捉到 sigkill。我有一个任务队列,并且每隔一段时间就会创建一个被 OOM 杀死的庞大任务。这个: catch Exception as
我在 Windows 上使用 Eclipse,以及用于 Python 开发的 PyDev 插件。当我使用“运行”启动我的应用程序时,它会生成一个新的 Python (CPython) 实例。当我使用“
我写了下面的代码,目的如下:子进程向父进程发送 SIGKILL 信号,然后父进程将使用处理程序来处理它。处理程序只是增加计数器。 int counter = 0;
我有 Xcode 4.2,每当我在模拟器中运行我的应用程序并按下停止调试按钮时,我都会收到一条 sigkill 消息。断点在 main.m 文件的这一行停止: int retVal = UIAppli
当我在模拟器中启动应用程序时,Xcode 就会切换到 main.m,大多数情况下我都会暂时看到此错误,但奇怪的是,错误会暂时消失,然后应用程序启动。 对我来说,Xcode 似乎困惑了一段时间,然后它意
当我在酒店时,他们的 Wifi 显然是通过非常非常慢的互联网连接连接到互联网的。事实上它可能是基于调制解调器的。 结果是我的应用程序的 HTTP GET 请求似乎导致 iOS 向我的应用程序发送 SI
我的机器上没有收到 SIGKILL 错误,在 ideone.com 在线编译器上也没有虽然它在 spoj 机器上给出了一个 SIGKILL,但无法找出原因编辑:该程序需要使用不到 256MB 的数据,
我是一名优秀的程序员,十分优秀!