我是新手,正在尝试编写一个脚本来禁用kworker业务,就像aMaia在这里的答案中所述。
到目前为止,我有以下内容,我从root用户运行:
1 #!/bin/bash
2
3 cd /sys/firmware/acpi/interrupts
4 for i in gpe[[:digit:]]* # Don't mess with gpe_all
5 do
6 num=`awk '{print $1}' $i`
7 if (( $num >= 1000 )); then # potential CPU hogs?
8 # Back it up and then disable it!!
9 cp $i /root/${i}.backup
10 echo "disable" > $i
11 fi
12 done
但运行它会导致以下结果:
./kkiller: line 10: echo: write error: Invalid argument
这里发生了什么?我认为
$i
只是文件名,这似乎是echo的正确语法。欢迎提出清理/改进脚本的建议!
更新:在脚本顶部添加
set -vx
后,以下迭代存在问题:+ for i in 'gpe[[:digit:]]*'
awk '{print $1}' $i
++ awk '{print $1}' gpe66
+ num=1024908
+ (( 1024908 >= 1000 ))
+ cp gpe66 /root/gpe66.backup
+ echo disable
./kkiller: line 10: echo: write error: Invalid argument
$i
中存储的值,在脚本的第一行后添加set -vx
。这样你就可以得到 shell 的调试/跟踪输出。我认为你会发现$i
的值类似于gpe99
,这在你的测试(( $num > = 1000 ))
中是无法工作的。关于echo "disable" > $i
,我不确定,所以请在你的问题中包含更多的调试输出,这样我们才能帮助你。(在输出中执行的命令和错误消息)。祝你好运。 - shellter