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

Исходное сообщение
"Написание скрипта с fork()"

Отправлено DrUMaS , 08-Янв-12 12:16 
Доброго времени суток!

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

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

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

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


Содержание

Сообщения в этом обсуждении
"Написание скрипта с fork()"
Отправлено Andrey Mitrofanov , 08-Янв-12 13:30 
В шеле нет форка.

"Написание скрипта с fork()"
Отправлено DrUMaS , 08-Янв-12 16:07 
А если без форка?

"Написание скрипта с fork()"
Отправлено DeadLoco , 09-Янв-12 22:33 
> В шеле нет форка.

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


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

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


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

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


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

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


"Написание скрипта с fork()"
Отправлено DeadLoco , 10-Янв-12 00:08 
> Но оно и к лучшему.

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



"Написание скрипта с fork()"
Отправлено Аноним , 10-Янв-12 19:04 
> В шеле нет форка.

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


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

Не форк :)


"Написание скрипта с fork()"
Отправлено ACCA , 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


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

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


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

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


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

А чё мучатся?


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