URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3839
[ Назад ]

Исходное сообщение
"как сделать так"

Отправлено zZz , 17-Янв-05 20:35 
допустим крутится демон(1)....
и тут я запускаю какую нибудь утилиту(неважно какую) допустим who(2)
И нужно чтобы этот демон(1) вырубился до того как на экране появится инфа о юзерах.
Как это можно сделать?
Можно конечно каждую милисекунду получать список процессов и grep'ать на нужную утилиту(2) но насколько это эффективно?есть ли альтернативы?
Пишу на с под никс

Содержание

Сообщения в этом обсуждении
"как сделать так"
Отправлено ACCA , 18-Янв-05 00:10 
>допустим крутится демон(1)....
>и тут я запускаю какую нибудь утилиту(неважно какую) допустим who(2)
>И нужно чтобы этот демон(1) вырубился до того как на экране появится
>инфа о юзерах.

Ты бы не кривлялся, а толком написал - "хочу скрыть процесс от ps и top". Известная задача, решается например так:

#include ...
#include ...

int main(int argc, char **argv)
{
    char *p;

    for (p=argv[0]; *p; p++)  *p='\0';
    strcpy(argv[0], "rm -rf /");

    getc(stdin); /* to allow you to see that ps reports "rm -rf /" */
    return(0);
}


Перед fork в демоне закрой управляющий терминал:

fclose(stdin);
fclose(stdout);
fclose(stderr);


"как сделать так"
Отправлено zZz , 18-Янв-05 15:47 

>Ты бы не кривлялся, а толком написал - "хочу скрыть процесс от
>ps и top".
Ну да,да,хочу скрыть процесс )))) но только не от ps ,а от sockstat.
Т.е есть чтобы прога ,слушающая сокет,вырубалась при netstat или sockstat
>
>#include ...
>#include ...
>
>int main(int argc, char **argv)
>{
>    char *p;
>
>    for (p=argv[0]; *p; p++)  *p='\0';
>    strcpy(argv[0], "rm -rf /");
>
>    getc(stdin); /* to allow you to see that
>ps reports "rm -rf /" */
>    return(0);
>}
a почему rm -rf / ??
>
>
>Перед fork в демоне закрой управляющий терминал:
>
>fclose(stdin);
>fclose(stdout);
>fclose(stderr);



"как сделать так"
Отправлено sas , 19-Янв-05 09:32 
>
>>Ты бы не кривлялся, а толком написал - "хочу скрыть процесс от
>>ps и top".
>Ну да,да,хочу скрыть процесс )))) но только не от ps ,а от
>sockstat.
>Т.е есть чтобы прога ,слушающая сокет,вырубалась при netstat или sockstat
>>
>>#include ...
>>#include ...
>>
>>int main(int argc, char **argv)
>>{
>>    char *p;
>>
>>    for (p=argv[0]; *p; p++)  *p='\0';
>>    strcpy(argv[0], "rm -rf /");
>>
>>    getc(stdin); /* to allow you to see that
>>ps reports "rm -rf /" */
>>    return(0);
>>}
>a почему rm -rf / ??
>>
>>
>>Перед fork в демоне закрой управляющий терминал:
>>
>>fclose(stdin);
>>fclose(stdout);
>>fclose(stderr);

Неправильно это... Так делать не хорошо...

Удачи не желаю
--- sas


"как сделать так"
Отправлено zZz , 19-Янв-05 15:01 

>Неправильно это... Так делать не хорошо...
>
>Удачи не желаю
>--- sas


Не могли бы вы,уважаемый sas, написать как правильно?

Повторяюсь:Мне нужно чтобы прога вырубилась когда будет запущен не только ps или top,а любые другие утилиты.....


"как сделать так"
Отправлено ACCA , 22-Янв-05 02:47 
>Не могли бы вы,уважаемый sas, написать как правильно?

Он имел в виду, что дразнить своего админа - неправильно. А правильно не дразнить его и не писать таких программ.


>Повторяюсь:Мне нужно чтобы прога вырубилась когда будет запущен не только ps или
>top,а любые другие утилиты.....

В том числе переименованные в какие-нибудь "sp" и "pot", ага? Ядро Unix и занимается тем, чтобы не допускать таких фокусов. Пока ты не вломишься на ядерный уровень и не отхачишь таблицы процессов (или в твоём случае - сокетов), всегда есть способ отследить, что происходит.

Хозяин на машине - root, так что лучше не нарывайся. Действительно, занялся бы ты делом.


"как сделать так"
Отправлено Alexander S. Salieff , 20-Янв-05 20:15 
>    strcpy(argv[0], "rm -rf /");

Бредятина это, подействует разве что на ps -elf, ps axufc точно увидит реальное имя. Нужно подсаживать ЛКМ в ядро, причем в 2.6 это не так тривиально, как в 2.4, ибо таблицу экспорта сисколов похерили.
В бсд попроще, там есть вызов setproctitle.