在嵌入式linux中启动/停止进程

时间:2018-06-03 11:26:56

标签: embedded-linux buildroot beagleboard

我在PocketBeagle板上有自己的嵌入式Linux系统。我在C中开发了一个简单的gpio应用程序,它向板的连接器的一个引脚发出开/关命令。该应用程序名为gpio_aa6,位于/ root。 第一个挑战是找到一种在启动电路板后自动启动应用程序的方法。我发现了两种方法;第一个是在etc / rcS目录中添加一个条目。此条目是一个启动我的应用程序的简单脚本文件。第二种方法是编辑/ etc / inittab文件并在该文件中添加一个条目(:: respawn:/ root / gpio_aa6)。在这两种方式中,我的应用程序都成功启动了:但我仍然不确定这是否是自动启动应用程序的正确方法。 然后我遇到了第二个挑战,我如何停止正在运行的应用程序,因为respawn重新启动应用程序,如果它终止了? 我以两种方式与董事会沟通;通过串行通信(使用屏幕终端)和通过Web服务器(root@192.168.42.2)。我试过使用Ctrl + C,Ctrl + Z,Ctrl + \,但无法阻止程序继续运行。然后我使用命令“killall”和killsignals -9或-15,似乎程序被中断了但是之后它又被直接启动了。

我的应用程序是无限运行,但我有时需要停止更新它并重新启动它。

有什么建议如何克服这个问题? 感谢。

1 个答案:

答案 0 :(得分:1)

您使用的两种解决方案都是正确的。我个人更喜欢将初始化脚本添加到/etc/init.d的选项。

我相信您观察到的显然无法杀死程序的行为是因为您正在使用inittab关键字从respawn启动程序,该关键字恰好告诉初始化程序重新启动您的应用程序退出时。如果您实际上检查了应用程序的PID,则每次杀死它时都会看到它的变化。

因此,我建议您改为使用初始化脚本,通过该脚本可以执行启动和停止操作。有关Buildroot中的基本示例,请参见./package/lldpd/S60lldpd