C 是否可以通过编程方式设置当前Linux运行级别?

C 是否可以通过编程方式设置当前Linux运行级别?,c,linux,runlevel,C,Linux,Runlevel,在不退出或调用exec的情况下,是否有方法以编程方式请求运行级更改?Sys-V init在/run/initctl处打开fifo。您可以发送的命令在initreq.h中有“描述”(很可能没有安装在您的系统上,但可以在init的源代码中找到) 因此,您所要做的就是打开/run/initctl并将请求写入其中 struct init_request request= {.magic = INIT_MAGIC, .cmd = INIT_CM

在不退出或调用exec的情况下,是否有方法以编程方式请求运行级更改?

Sys-V init在/run/initctl处打开fifo。您可以发送的命令在initreq.h中有“描述”(很可能没有安装在您的系统上,但可以在init的源代码中找到)

因此,您所要做的就是打开/run/initctl并将请求写入其中

struct init_request request= {.magic = INIT_MAGIC, 
                              .cmd = INIT_CMD_START, 
                              .runlevel= [your_run_level], 
                              .sleeptime = 5  //should sleep 5s between term and kill
                             };

您使用哪个init系统?sys-v-embedded
而不进行外壳处理或调用exec
-在调用外壳或调用exec时如何更改系统的运行级别检查您调用的实体的源代码-提取更改它的“programmaticall”方法。“程序性更改”与“退出”或“调用exec”有何不同?因此,我不想调用“system(telinit 4)”。然而,我同样不想深入到init的源代码中去做它所做的事情,这不是一个稳定的API。所以我想知道sys-vinit是否有一个稳定的API。我猜systemd使用的是DBus。