我需要编写一个 C 程序来启动另一个具有修改的优先级的程序,就像nice
命令一样。为了做到这一点,我想找到作为参数给出的进程的PID(我该怎么做?)并修改它的优先级(我该怎么做?)。
示例:命令行可能是./a.out 5 sleep 500 &
,这应该产生与nice -n 5 sleep 500&
.
你专注于错误的事情,因此用错误的想法来解决问题。关键要求是您的程序必须执行指定的命令。专注于这一点将引导您实现流程优先目标,至少可以帮助您更有效地构建问题。例如,您不需要找到任何 PID,因为您不需要调整任意进程的 niceness。
那么如何以编程方式启动另一个命令呢?典型的方法是使用exec 系列的功能之一。由于程序名称和参数来自命令行,execvp()
因此可能是您的最佳选择。
如果您阅读他们的文档,您会发现 exec 函数替换了当前进程中的进程映像。也就是说,它们使调用它们的进程启动并运行一个不同的程序来代替之前运行的程序。如果您要启动的命令将在当前进程中运行,那么您想要调整其 niceness 的就是当前进程,并且为此存在nice()。
除了这两个函数和一点命令行解析之外,您应该不需要更多。但是,请仔细阅读这些函数的文档,尤其是execvp()
',以确保正确设置参数。