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

Исходное сообщение
"Как в С задать название процесса, которое хочу исспользовать"

Отправлено Stiki , 07-Сен-03 16:44 
Собественно subj. Мне надо моей программулине задать название, под которым она будет запускаться.

Содержание

Сообщения в этом обсуждении
"Как в С задать название процесса, которое хочу исспользовать"
Отправлено Vladislav Lazarenko , 08-Сен-03 12:54 
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.


Тебе помочь придумать название программе ? Или что ? :))


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено David , 10-Сен-03 00:20 
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.

Если ты имеешь в виду название процесса, которое выдаётся при ps, то его точно можно изменить. Где-то я раньше про это читал. Уже точно не помню, но возможно через argv[0], но может это и глупость.


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено Stiki , 10-Сен-03 00:24 
>Если ты имеешь в виду название процесса, которое выдаётся при ps, то
>его точно можно изменить. Где-то я раньше про это читал. Уже
>точно не помню, но возможно через argv[0], но может это и
>глупость.

Во, ща посмотрю так или не так.


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено Sergey , 11-Сен-03 19:38 
>>Если ты имеешь в виду название процесса, которое выдаётся при ps, то
>>его точно можно изменить. Где-то я раньше про это читал. Уже
>>точно не помню, но возможно через argv[0], но может это и
>>глупость.
>
>Во, ща посмотрю так или не так.


argv[argc-1][strlen(argv[argc-1])] = 1;
/* Tell the kernel - we have new command line */
sprintf(argv[0], "MyNewName");


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено Макс Зиналь , 13-Сен-03 20:54 
>
>argv[argc-1][strlen(argv[argc-1])] = 1;
>/* Tell the kernel - we have new command line */
>sprintf(argv[0], "MyNewName");

Segmentation Fault.


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено SnaiL , 14-Сен-03 01:19 
>>
>>argv[argc-1][strlen(argv[argc-1])] = 1;
>>/* Tell the kernel - we have new command line */
>>sprintf(argv[0], "MyNewName");
>
>Segmentation Fault.

Это неправильный код, но идея похожа на правду.
Сначала необходимо сделать vfork() или fork(),
а потом вызвать себя с помощью execve, передав как argv[0] необходимое имя ...


"Как в С задать название процесса, которое хочу исспользовать"
Отправлено qq , 14-Сен-03 04:12 
>Собественно subj. Мне надо моей программулине задать название, под которым она будет
>запускаться.


под freebsd есть ф-ция setproctitle

или можно поюзать вот это (стянуто из сырцов ftpd)

#include <stdio.h>
#include <stdarg.h>

char    **Argv = NULL;          /* pointer to argument vector */
char    *LastArgv = NULL;       /* end of argv */

void setproctitle(const char *fmt, ...)
{
        int i;
        va_list ap;
        char *p, *bp, ch;
        char buf[256];

        va_start(ap,fmt);

        (void)vsnprintf(buf, sizeof(buf), fmt, ap);

        /* make ps print our process name */
        p = Argv[0];

        i = strlen(buf);
        if (i > LastArgv - p - 2) {
                i = LastArgv - p - 2;
                buf[i] = '\0';
        }
        bp = buf;
        while (ch = *bp++)
                if (ch != '\n' && ch != '\r')
                        *p++ = ch;
        while (p < LastArgv)
                *p++ = ' ';
}


int main(int argc,char **argv,char **envp)
{
        /*
     *          *  Save start and extent of argv for setproctitle.
     *                   */
        Argv = argv;
        while (*envp)
                envp++;
        LastArgv = envp[-1] + strlen(envp[-1]);

    setproctitle("new title");

    sleep(1000);
    return 0;
}