2013-05-09 3 views
0

Я написал код для повышения приоритета процесса в моей системе 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, &param); 
    else if(strcmp(argv[3],"RR") == 0) 
     sched_setscheduler((pid_t)pid, SCHED_RR, &param); 
    else if(strcmp(argv[3],"OTH") == 0) 
       sched_setscheduler((pid_t)pid, SCHED_OTHER, &param); 
    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. Это по-прежнему обычный приоритет. Вот файл изображения видно на замазку

enter image description here

Более того, если я вызываю shell.sh скрипт вручную в командной строке вместо boot.local, boostprio работает должным образом!

Вот printscr

enter image description here

Следовательно, мой/USR/SBIN/boostprio ехе не работает, когда она вызывается из /etc/init.d/boot.local

Кроме того Я распечатал функцию sched_setscheduler() func в boostprio.c и не смог вернуться 255 Я думаю, что это настоящая проблема. Но я не знаю, как это выяснить?

ответ

0

Похоже, у вас есть проблемы с синхронизацией. (-:

На OpenSUSE 12.2 (и другие) служба statin является assincronous и из-за этого вы не можете полагаться на boot.local для этого. На мой взгляд, лучший способ сделать это - написать скрипт init.d кто зависит от службы sshd (или $ ALL), и при запуске подождите немного (на всякий случай), а затем попробуйте изменить приоритет sshd

Посмотрите на сценарий в /etc/init.d/skeleton as ссылки и написать новый с некоторыми изменениями в заголовке;

что-то вроде:

### BEGIN INIT INFO 
# Provides:   sshprio 
# Required-Start: $ALL 

или ...

### BEGIN INIT INFO 
# Provides:   sshprio 
# Required-Start: sshd 
+0

Я не думаю, что он обеспокоен асинхронным. Потому что неудача - sched_setscheduler. – roll

+0

Я попытался initscript как /init.d/skeleton.It начал sshd после загрузки. к сожалению, он не повышает приоритет так же, как и старый. – roll

Смежные вопросы