Доброго времени суток!Помогите, пожалуйста со скриптом:
Написать скрипт, осуществляющий операции над файлами в несколько потоков
одновременно; команда операции и ее аргументы передаются в скрипт в качестве
параметров. Число потоков определяется значением n*<число процесcов>.Как это можно сделать при помощи форка?!
Заранее благодарен.
В шеле нет форка.
А если без форка?
> В шеле нет форка.Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.
>> В шеле нет форка.
> Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.А чего шеловый "job control" пользует fork? Ух ты! Надо было проверяться по исходгикам...
>>> В шеле нет форка.
>> Строго говоря, в шелле можно запустить субшелл в бекграунде. А дальше $$ и $! юзать.
> А чего шеловый "job control" пользует fork? Ух ты! Надо было проверяться
> по исходгикам...Не, там ехес*(), но для сабжевой задачи ничем не хуже форка.
>>>> В шеле нет форка.
> Не, там ехес*(), но для сабжевой задачи ничем не хуже форка.Ничем. Только субшел пускается со строки 1, локальные переменные не копирубтся, чего там ещё? Но оно и к лучшему.
> Но оно и к лучшему.Именно. Потому что важно задачу решить - распараллелить обработку, а не канон соблюсти. ИМХО, разумеется.
> В шеле нет форка.А & по твоему что?
>> В шеле нет форка.
> А & по твоему что?Не форк :)
> В шеле нет форка.Не путай студента. >(), всякие | и & вызывают 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
> Написать скрипт, осуществляющий операции над файлами в несколько потоков
> одновременно; команда операции и ее аргументы передаются в скрипт в качестве
> параметров. Число потоков определяется значением n*<число процесcов>.
> Как это можно сделать при помощи форка?!
> Заранее благодарен.Лаба что ли?
http://sf.net/projects/paexec/
>> Написать скрипт, осуществляющий операции над файлами в несколько потоков
>> одновременно; команда операции и ее аргументы передаются в скрипт в качестве
>> параметров. Число потоков определяется значением n*<число процесcов>.
>> Как это можно сделать при помощи форка?!
>> Заранее благодарен.
> Лаба что ли?
> http://sf.net/projects/paexec/Ага, лаба. Форк, как сказали не робит, и это, как бы - печально. Значит должен быть другой метод именно на bash. Помогите, плиз - три дня мучаюсь.
> Ага, лаба. Форк, как сказали не робит, и это, как бы -
> печально. Значит должен быть другой метод именно на bash. Помогите, плиз
> - три дня мучаюсь.А чё мучатся?
for ((i=0; i < $n; i++))
do
echo "Я форк # $i" &
done