我正在运行 Linux 的封闭环境中运行自动驾驶仪,并且我有一个需要更改其优先级的内核线程。我不想为此修补内核。该线程是在 SPI 驱动程序探测其硬件时在启动早期创建的,并命名为 spi0。我可以把这个问题分成两部分,我需要帮助获取名为 [spi0] 的线程的 PID,chrt
一旦我有了 PID,将其标记为 SCHED_FIFO 并相应地设置优先级就足够容易了。
$ ps -ef | grep '\[spi0\]'
root 203 2 2 Aug28 ? 00:59:19 [spi0]
答案1
在 Unix 堆栈交换上搜索标签时,我发现了pidof
和pgrep
。这些在 shell 脚本中捕获的输出要简单得多:
$ pidof -s spi0
203
或者,获得与进程名称的精确匹配并返回该进程的 PID最老的匹配过程,使用pgrep
,
$ pgrep -x -o spi0
203
所以完整的调度程序调整变成:
$ sudo chrt -f -p 10 "$(pidof -s spi0)"
$ sudo chrt -p "$(pidof -s spi0)"
pid 203's current scheduling policy: SCHED_FIFO
pid 203's current scheduling priority: 10