The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"порождение процесса с заданным именем (С/С++/Perl)"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от AT emailИскать по авторуВ закладки(??) on 05-Окт-04, 12:09  (MSK)
Добрый день,
как можно под unix породить процесс с заданным именем,
например: имеем ветвящийся сервер, который на каждое новое подключение форкает новый процесс; как задать имя этого нового процесса (напр., в зависимости от того, кто коннектиться)?

Спасибо заранее.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от klalafuda emailИскать по авторуВ закладки on 05-Окт-04, 12:19  (MSK)
>Добрый день,
>как можно под unix породить процесс с заданным именем,
>например: имеем ветвящийся сервер, который на каждое новое подключение форкает новый процесс;
>как задать имя этого нового процесса (напр., в зависимости от того,
>кто коннектиться)?

через fork() - никак.
через exec - это уже не fork().

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от AT emailИскать по авторуВ закладки(??) on 05-Окт-04, 12:30  (MSK)

>через fork() - никак.
>через exec - это уже не fork().
>
>// wbr

ок, а если через exec? Можно ли запускать новый процесс, задавать ему имя и передавать дескриптор подключенного сокета?

или какие ещё есть варианты?
(факт то, что это реализуемо)

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от MaximKuznetsov Искать по авторуВ закладки on 05-Окт-04, 13:02  (MSK)
>
>>через fork() - никак.
>>через exec - это уже не fork().
>>
>>// wbr
>
>ок, а если через exec? Можно ли запускать новый процесс, задавать ему
>имя и передавать дескриптор подключенного сокета?
>
>или какие ещё есть варианты?
>(факт то, что это реализуемо)
универсального способа НЕТ, но в некоторых системах катит просто перезапись argv[0], чтобы переименовать текущую задачу :
int main(int argc,char *argv[]) {
  snprintf(argv[0],strlen(argv[0]),"another name");
...
}


  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от klalafuda emailИскать по авторуВ закладки on 05-Окт-04, 14:01  (MSK)
>>
>>>через fork() - никак.
>>>через exec - это уже не fork().
>>>
>>>// wbr
>>
>>ок, а если через exec? Можно ли запускать новый процесс, задавать ему
>>имя и передавать дескриптор подключенного сокета?
>>
>>или какие ещё есть варианты?
>>(факт то, что это реализуемо)
>универсального способа НЕТ, но в некоторых системах катит просто перезапись argv[0], чтобы
>переименовать текущую задачу :
>int main(int argc,char *argv[]) {
>  snprintf(argv[0],strlen(argv[0]),"another name");
>...
>}

heh.. на BSD это работает, но отчасти :)

---cut---
int
main(int argc, char *argv[])
{
    snprintf(argv[0], strlen(argv[0]), "xxx");
---cut---

$ ./server | tee ior
$ ps
  PID TT STAT    TIME COMMAND
3373 p0 S+   0:00.05 xxx (server)

ps: но я бы не стал особо надеяться на стабильность такого поведения..

// wbr

  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от chip emailИскать по авторуВ закладки(??) on 09-Окт-04, 00:34  (MSK)
>>>
>>>>через fork() - никак.
>>>>через exec - это уже не fork().
>>>>
>>>>// wbr
>>>
>>>ок, а если через exec? Можно ли запускать новый процесс, задавать ему
>>>имя и передавать дескриптор подключенного сокета?
>>>
>>>или какие ещё есть варианты?
>>>(факт то, что это реализуемо)
>>универсального способа НЕТ, но в некоторых системах катит просто перезапись argv[0], чтобы
>>переименовать текущую задачу :
>>int main(int argc,char *argv[]) {
>>  snprintf(argv[0],strlen(argv[0]),"another name");
>>...
>>}
>
>heh.. на BSD это работает, но отчасти :)

man 3 setproctitle

  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "порождение процесса с заданным именем (С/С++/Perl)"
Сообщение от Murr Искать по авторуВ закладки(??) on 09-Окт-04, 10:42  (MSK)
>Добрый день,
>как можно под unix породить процесс с заданным именем,
>например: имеем ветвящийся сервер, который на каждое новое подключение форкает новый процесс;
>как задать имя этого нового процесса (напр., в зависимости от того,
>кто коннектиться)?
>
>Спасибо заранее.

А что такое имя процесса? =)

Например, для Linux:

Есть, к примеру, comm, который определяется из имени запускаемого бинарника и не может быть изменен со временем.

Есть argv[0], который лежит в конце адресного пр-ва процесса и легально его изменить можно только если длина нового имени короче старого (иначе - только с перезаписью других аргументов и, возможно, environment).

ps может показывать и comm и argv[0] (зависит от ключей).

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру