我正在开发一个嵌入式 Linux 系统,其中 busybox 被用作 init。
我对运行我的应用程序有两个要求。
- 我的申请需要尽早开始;
- 它需要由busybox管理(如果退出则重生)。
首先,我在 /etc/inittab 中启动我的应用程序,如下所示,
# now run any rc scripts
::sysinit:/etc/init.d/rcS
# Put a getty on the serial port
#ttyS3::respawn:/sbin/getty -L ttyS3 57600 vt100 # GENERIC_SERIAL
#no login
::respawn:/usr/bin/myapp
::respawn:-/bin/sh
这样myapp就由busybox管理,当它退出时,busybox会自动启动它。
但我发现很多服务/守护进程是在/etc/init.d/rcS
启动 myapp 之前启动的。这不符合第一个要求。
我创建了/etc/init.d/S02myapp
(由 启动/etc/init.d/rcS
)来在其中启动我的应用程序,但它不满足第二个要求(我不知道 busybox 是否可以管理由 启动的应用程序rcS
)。
然后我找到了另一种方法来满足这两个要求,如下所示,
- 更改
/etc/init.d/S02myapp
,启动另一个进程myapp.sh
作为后台进程。 - Create
myapp.sh
,其中有一个 while 循环,其中 myapp 作为前台进程启动。
有了它, myapp 就会尽早启动(由 启动rcS
),如果它退出, while 循环myapp.sh
将再次启动它。
我验证了它的工作原理,但我认为这种方式有点难看,因为它显示了ps ax
如下内容,
1539 root 0:00 {myapp.sh} /bin/sh /etc/init.d/myapp.sh
1544 root 0:00 /sbin/mdev -df
1545 root 1:21 myapp
我想知道是否有明确的方法来满足我的应用要求?