目前,我想从内核端调用execvp。 我的程序被编程为进入暂停模式。 所以我试着设置下面的代码:
char *argv[] = { "/sbin/halt", "-f", NULL };
char * envp[] = {
"SHELL=/bin/sh",
"HOME=/",
"PATH=.:/sbin:/usr/sbin:/bin:/usr/bin",
"PWD=/",
NULL };
rc = call_usermodehelper(argv[0], argv, envp, UMH_WAIT_EXEC);
似乎代码可以很好地执行halt命令。 但它不符合电信号的要求。 当我从用户空间调用execvp时,我已经检查过了:
execvp ("halt", argv);
它按预期运作良好。
我知道execvp会用传递参数中指定的新编程替换当前正在运行的编程。当我使用call_usermodehelper时,这不会发生,我认为这可能是不同的。 谁知道我怎么能解决这个问题?如何使execvp在驱动程序中工作类似于用户空间。
谢谢!