The OpenNET Project / Index page

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

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

"Написание скрипта с fork()"  +/
Сообщение от DrUMaS email(ok) on 08-Янв-12, 12:16 
Доброго времени суток!

Помогите, пожалуйста со скриптом:

Написать скрипт, осуществляющий операции над файлами в несколько потоков
одновременно; команда операции и ее аргументы передаются в скрипт в качестве
параметров. Число потоков определяется значением n*<число процесcов>.

Как это можно сделать при помощи форка?!

Заранее благодарен.

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

Оглавление

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


1. "Написание скрипта с fork()"  +/
Сообщение от Andrey Mitrofanov on 08-Янв-12, 13:30 
В шеле нет форка.
Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "Написание скрипта с fork()"  +/
Сообщение от DrUMaS email(ok) on 08-Янв-12, 16:07 
А если без форка?
Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "Написание скрипта с fork()"  +/
Сообщение от DeadLoco (ok) on 09-Янв-12, 22:33 
> В шеле нет форка.

Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.

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

4. "Написание скрипта с fork()"  +/
Сообщение от Andrey Mitrofanov on 09-Янв-12, 23:12 
>> В шеле нет форка.
> Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.

А чего шеловый "job control" пользует fork? Ух ты! Надо было проверяться по исходгикам...

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

5. "Написание скрипта с fork()"  +/
Сообщение от DeadLoco (ok) on 09-Янв-12, 23:33 
>>> В шеле нет форка.
>> Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.
> А чего шеловый "job control" пользует fork? Ух ты! Надо было проверяться
> по исходгикам...

Не, там ехес*(), но для сабжевой задачи ничем не хуже форка.

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

6. "Написание скрипта с fork()"  +/
Сообщение от Andrey Mitrofanov on 09-Янв-12, 23:54 
>>>> В шеле нет форка.
> Не, там ехес*(), но для сабжевой задачи ничем не хуже форка.

Ничем. Только субшел пускается со строки 1, локальные переменные не копирубтся, чего там ещё? Но оно и к лучшему.

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

7. "Написание скрипта с fork()"  +/
Сообщение от DeadLoco (ok) on 10-Янв-12, 00:08 
> Но оно и к лучшему.

Именно. Потому что важно задачу решить - распараллелить обработку, а не канон соблюсти. ИМХО, разумеется.


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

10. "Написание скрипта с fork()"  –1 +/
Сообщение от Аноним (??) on 10-Янв-12, 19:04 
> В шеле нет форка.

А & по твоему что?

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

11. "Написание скрипта с fork()"  +/
Сообщение от DeadLoco (ok) on 11-Янв-12, 00:31 
>> В шеле нет форка.
> А & по твоему что?

Не форк :)

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

13. "Написание скрипта с fork()"  +/
Сообщение от ACCA (ok) on 11-Янв-12, 09:52 
> В шеле нет форка.

Не путай студента. >(), всякие | и & вызывают fork. Поэтому в cygwin будут работать через жопу, если не пошлют нах сразу.

По теме - студент ничего не сказал про то, откуда брать данные и куда класть. Предположим, что нужно разбирать STDIN, обрабатывать построчно в N потоков и складывать в OUT.DAT:

#!/bin/bash
N=$1
shift
(( N += 3 ))
for ((i=3; i< $N; i++))
do
    eval "exec $i> >($* > $i.dat)"
done
# Split stream
i=3
while read row
do
    echo $row >&$i
    (( i++ ))
    [ $i -ge $N ] && i=3
done
# Merge results
cat *.dat > OUT.DAT
rm *.dat


вызываем 10 потоков cat: ./sch.sh 10 cat < file_to_process.xxx

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

8. "Написание скрипта с fork()"  +/
Сообщение от vle email(ok) on 10-Янв-12, 00:22 
> Написать скрипт, осуществляющий операции над файлами в несколько потоков
> одновременно; команда операции и ее аргументы передаются в скрипт в качестве
> параметров. Число потоков определяется значением n*<число процесcов>.
> Как это можно сделать при помощи форка?!
> Заранее благодарен.

Лаба что ли?
http://sf.net/projects/paexec/

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

9. "Написание скрипта с fork()"  +/
Сообщение от DrUMaS email(ok) on 10-Янв-12, 07:36 
>> Написать скрипт, осуществляющий операции над файлами в несколько потоков
>> одновременно; команда операции и ее аргументы передаются в скрипт в качестве
>> параметров. Число потоков определяется значением n*<число процесcов>.
>> Как это можно сделать при помощи форка?!
>> Заранее благодарен.
> Лаба что ли?
> http://sf.net/projects/paexec/

Ага, лаба. Форк, как сказали не робит, и это, как бы - печально. Значит должен быть другой метод именно на bash. Помогите, плиз - три дня мучаюсь.

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

14. "Написание скрипта с fork()"  +/
Сообщение от pavlinux (ok) on 14-Янв-12, 19:08 
> Ага, лаба. Форк, как сказали не робит, и это, как бы -
> печально. Значит должен быть другой метод именно на bash. Помогите, плиз
> - три дня мучаюсь.

А чё мучатся?


for ((i=0; i < $n; i++))
  do
     echo "Я форк # $i" &
done


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

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

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




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

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