2

我使用基于 Poky 的 Yocto 创建了一个定制的嵌入式 Linux 发行版。我正在使用 SysVInit 实用程序。当我们重新启动系统并调用所有 rc6 脚本时。几乎在最后 /etc/init.d/sendsigs 脚本被调用。该脚本首先向所有正在运行的进程发送 SIGTERM 信号并休眠 5 秒,然后向所有剩余进程发送 SIGKILL 信号。我看到的问题是当我重新启动系统时,脚本发送 SIGTERM 信号并睡眠 5 秒,但在睡眠后没有唤醒,因此它不发送 SIGTERM 并挂起系统导致系统不重新启动。以下是 /etc/init.d/sendsigs 脚本

echo "Sending TERM signal..."
killall5 -15
sleep 5     # Does not wakeup after sleep.
echo "Sending KILL signal..."
killall5 -9

看起来内核调度程序没有唤醒脚本进程。但是我应该在哪里寻找解决问题或问题可能出在哪里的任何想法。

谢谢。

4

1 回答 1

0

我遇到了类似的问题。就我而言,问题是在调用 K80networking 时仍有一个进程仍在运行,该进程使用网络堆栈。在 sendigs 中关机进入睡眠 5 之前,内核锁定不会发生。奇怪的是,在 sendigs 中将 sleep 5 替换为 sleep 1 调用了五次,从而解决了这个问题。

于 2020-03-27T15:33:48.523 回答