Я написал код для повышения приоритета процесса в моей системе openSuSE 12.2.Как я могу выполнить мой exe-файл из boot.local
#include <stdio.h>
#include <sched.h>
#include <unistd.h>
int printUsage(void)
{
printf("\nUsage:\nboostprio [pid] [priority: (0-99)] [policy: FF:RR:OTH]\n");
exit (1);
}
int main (int argc , char *argv[])
{
int pid = -1 ;
int pri;
struct sched_param param;
if(argc != 4){
printf("\nArgument miss match !!");
printUsage();
return -1;
}
if((strcmp(argv[1],"-h") == 0) || (strcmp(argv[1],"--help") == 0))
printUsage();
pid = atoi(argv[1]);
if(pid <= 0){
printf("\nPid is not correct!!\n");
return -1;
}
pri = atoi(argv[2]);
if((pri > 99) || (pri < 0)){
printf("\nPriority value is not valid !!\n");
return -1;
}
param.sched_priority = pri;
if(strcmp(argv[3],"FF") == 0)
sched_setscheduler((pid_t)pid, SCHED_FIFO, ¶m);
else if(strcmp(argv[3],"RR") == 0)
sched_setscheduler((pid_t)pid, SCHED_RR, ¶m);
else if(strcmp(argv[3],"OTH") == 0)
sched_setscheduler((pid_t)pid, SCHED_OTHER, ¶m);
else{
printf("\nInvalid scheduling policy type!!\n");
printUsage();
}
return 0;
}
, а затем я пишу Баш скрипт shell.sh вызывающую boostprio двоичный файл
#!/bin/sh
PID=`ps -ef | grep "sshd -p 911" |head -1 | awk '{print $2}'`
/sbin/boostprio $PID 95 RR
if [ "$?" == 0 ]; then
logger -t "Emergency shell is activated."
else
logger -t "Emergency shell is NOT activated !!"
fi
Хотя новый SSHD -p 911 начинается при загрузке, boostprio ехе не работает и оленья кожа повысить приоритет SSHD. Это по-прежнему обычный приоритет. Вот файл изображения видно на замазку
Более того, если я вызываю shell.sh скрипт вручную в командной строке вместо boot.local, boostprio работает должным образом!
Вот printscr
Следовательно, мой/USR/SBIN/boostprio ехе не работает, когда она вызывается из /etc/init.d/boot.local
Кроме того Я распечатал функцию sched_setscheduler() func в boostprio.c и не смог вернуться 255 Я думаю, что это настоящая проблема. Но я не знаю, как это выяснить?
Я не думаю, что он обеспокоен асинхронным. Потому что неудача - sched_setscheduler. – roll
Я попытался initscript как /init.d/skeleton.It начал sshd после загрузки. к сожалению, он не повышает приоритет так же, как и старый. – roll