допустим крутится демон(1)....
и тут я запускаю какую нибудь утилиту(неважно какую) допустим who(2)
И нужно чтобы этот демон(1) вырубился до того как на экране появится инфа о юзерах.
Как это можно сделать?
Можно конечно каждую милисекунду получать список процессов и grep'ать на нужную утилиту(2) но насколько это эффективно?есть ли альтернативы?
Пишу на с под никс
>допустим крутится демон(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);
>Ты бы не кривлялся, а толком написал - "хочу скрыть процесс от
>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);
>
>>Ты бы не кривлялся, а толком написал - "хочу скрыть процесс от
>>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
>Неправильно это... Так делать не хорошо...
>
>Удачи не желаю
>--- sas
Не могли бы вы,уважаемый sas, написать как правильно?Повторяюсь:Мне нужно чтобы прога вырубилась когда будет запущен не только ps или top,а любые другие утилиты.....
>Не могли бы вы,уважаемый sas, написать как правильно?Он имел в виду, что дразнить своего админа - неправильно. А правильно не дразнить его и не писать таких программ.
>Повторяюсь:Мне нужно чтобы прога вырубилась когда будет запущен не только ps или
>top,а любые другие утилиты.....В том числе переименованные в какие-нибудь "sp" и "pot", ага? Ядро Unix и занимается тем, чтобы не допускать таких фокусов. Пока ты не вломишься на ядерный уровень и не отхачишь таблицы процессов (или в твоём случае - сокетов), всегда есть способ отследить, что происходит.
Хозяин на машине - root, так что лучше не нарывайся. Действительно, занялся бы ты делом.
> strcpy(argv[0], "rm -rf /");Бредятина это, подействует разве что на ps -elf, ps axufc точно увидит реальное имя. Нужно подсаживать ЛКМ в ядро, причем в 2.6 это не так тривиально, как в 2.4, ибо таблицу экспорта сисколов похерили.
В бсд попроще, там есть вызов setproctitle.