The OpenNET Project / Index page

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

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

"Запуск фонового процесса из Perl"  +/
Сообщение от Константин email(??) on 07-Июн-13, 16:26 
Добрый день. Столкнулся с такой проблемой. Есть две машины - 192.168.1.2 и 192.168.1.1. На  машине 192.168.1.1 запускаю команду в bash: cat file.out | nc -l 2222 (читаю файл и кидаю поток на порт 2222).

На другой машине мне надо считать эти данные и записать в файл. Причем сделать это именно из скрипта на перле.

script.pl (на машине 192.168.1.2)
system "nc 192.168.1.1 2222 > /file.in &"

Проблема  в том что эта команда не выполняется если стоит знак &, то есть перл запускать команду шелл в фоне не хочет.

Работает только так:
system "nc 192.168.1.1 2222 > /file.in". Но тогда если большой файл то выполнение всего скрипта останавливается пока не будет считан весь файл.
Причем если запустить канаду в шелле:nc 192.168.1.1 2222 > /file.in & - то она спокойно выполняется в фоне. А вот из перла почему то не хочет.

Подскажите как запустить эту команду чтобы она выполнялась в фоне

Спасибо

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Запуск фонового процесса из Perl"  +/
Сообщение от михалыч (ok) on 07-Июн-13, 16:58 
Использовать обратные кавычки?
`nc 192.168.1.1 2222 > /file.in &`;
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Запуск фонового процесса из Perl"  +/
Сообщение от XAnder (ok) on 07-Июн-13, 17:02 
Попробуйте fork.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

3. "Запуск фонового процесса из Perl"  +/
Сообщение от Константин email(??) on 10-Июн-13, 08:03 
И fork и обратные кавычки пробовал. Ситуация одна и та же, выполнение скрипта начинается и тут же прекращатся, скачивается в file.in только 1024 бита.


Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "Запуск фонового процесса из Perl"  +/
Сообщение от XAnder (ok) on 10-Июн-13, 08:20 
> И fork и обратные кавычки пробовал. Ситуация одна и та же, выполнение
> скрипта начинается и тут же прекращатся, скачивается в file.in только 1024
> бита.

Как пробовали-то? Хоть бы пример кода, а то непонятно, что и посоветовать.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "Запуск фонового процесса из Perl"  +/
Сообщение от Константин email(??) on 10-Июн-13, 13:50 
> Как пробовали-то? Хоть бы пример кода, а то непонятно, что и посоветовать.

Использование fork:

if ($pid=fork){
waitpid($pid,0);
}

else {
exec "nc 192.168.1.1 2222 > /file.in &"
}

Этот код также создает файл file.in, записывает в него 1024 бита и останавливается.

Обратные кавычки пробовал:

`nc 192.168.1.1 2222 > /file.in &`

работает также как и system, то есть процесс запускается и срезу же умирает

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "Запуск фонового процесса из Perl"  +/
Сообщение от XAnder (ok) on 10-Июн-13, 14:28 
> if ($pid=fork){
>  waitpid($pid,0);
> }

Что-то я не понял. Зачем здесь останавливаться и ждать, когда дочерний процесс завершится, если нам нужно было наоборот - не ждать, а идти дальше?

> else {
> exec "nc 192.168.1.1 2222 > /file.in &"
> }

"&" на конце тут явно ни к чему. А что, если попробовать запустить более строго, как-то так:

open STDOUT, '>', '/file.in';
exec 'nc', '192.168.1.1', '2222';

> Этот код также создает файл file.in, записывает в него 1024 бита и
> останавливается.

Это поведение мне не понятно, хотя я и не знаю тонкостей использования nc.

> Обратные кавычки пробовал:
> `nc 192.168.1.1 2222 > /file.in &`
> работает также как и system,

Вроде логично.

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

7. "Запуск фонового процесса из Perl"  +/
Сообщение от Константин email(??) on 10-Июн-13, 15:37 
Написал вот такой код:

if ($pid=fork){
  
}
else {
open STDOUT, '>', '/file.in'; 
exec 'nc', '192.168.1.1', '2222';

}

Заработало. Спасибо.


Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "Запуск фонового процесса из Perl"  +/
Сообщение от ACCA (ok) on 19-Июн-13, 10:53 
> Написал вот такой код:
> if ($pid=fork){
>  }
>  else {
>  
open STDOUT, '>', '/file.in'; 
>  exec 'nc', '192.168.1.1', '2222';

>  }

Извращенец.
perldoc Socket.

Ответить | Правка | ^ к родителю #7 | Наверх | Cообщить модератору

Архив | Удалить

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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