Две стороны канала находятся в различных процессах. Вы не можете совместно использовать переменные между этими процессами. Если Вы хотите обменяться данными, Вы или должны передать его через канал или каналы передачи альтернативы использования. Если Вы должны чередовать каналы передачи, Вы выше возможностей оболочки, переключаетесь на реальный язык программирования.
Здесь, передача lot_url
рядом img_url
во втором канале походит на хорошее решение меня. Я передал бы их той же строке. Принятия Ваших URL правильно оставляют, Вам не нужно никакое конкретное заключение в кавычки, можно передать их той же строке. Это имело бы преимущество разрешения переменного количества img_url
s в каждом lot_url
.
second_function(){
while read lot_url; do
echo "$lot_url"
curl -s "$lot_url" | sed -nr -e '
#extract img src
' -e "s>^>$lot_url >"
done
}
third_function(){
while read lot_url img_url; do
echo "<a href="$lot_url"><img src="$img_url" /></a>"
done
}
Попробуйте psacct
пакет (учет GNU), это должно сделать примерно все, в чем Вы нуждаетесь, когда-то установленный и включенный (accton
), затем lastcomm
сохранит отчет о пользовательских процессах (см. также sa
и dump-acct
). Посмотрите это для ссылки: выполняемый файл журнала команд Пользователя
Вы, возможно, должны были бы обновить версию, чтобы зарегистрировать PID/PPID, видеть https://serverfault.com/questions/334547/how-can-i-enable-pid-and-ppid-fields-in-psacct-dump-acct, иначе я подозреваю, что это занизит сведения на fork()
без exec()
.
Обновление, Если Ваш lastcomm
выводы F
в 2-м столбце это означает, что процесс был ветвлением (который никогда не звонил exec()
заменять себя новым процессом). Вывод dump-acct
должен показать Вам PID (и PPID) в формате acct v3.
Альтернатива psacct могла бы быть новым (выход) taskstats
, еще нет огромной суммы поддержки его AFAICT, посмотрите Documentation/accounting/taskstats.txt
в Вашем источнике версии ядра. Это могло бы помочь получить Вас, запустил http://code.google.com/p/arsenalsuite/wiki/TrackingIOUsage https://code.google.com/archive/p/anim-studio-tools/, который определенный пример кода tasklogger.c
, необходимо будет изменить printf()
строка в функции print_delayacct2()
, во-первых заменять %u
с %llu
для __u64
типы и во-вторых добавить поле ac_uid
(и возможно ac_gid
) то, что необходимо отследить пользователем. Вызовите его с чем-то как tasklogger -dl -m 0-1
(где -m 0-1
указывает на центральные процессоры 0-1). Вы будете затем рассматривать детали в реальном времени как каждый процесс выходы.
Существует также модуль жемчуга Linux::Taskstats::Read
доступный на CPAN, хотя я не использовал его.
Необходимо будет обработать данные на основе меток времени, если Вы захотите количество параллельного процесса, в расчете на пользователя, это не простое, поскольку это звучит.
Обновите 2 хорошо, вещи проверить на необходимое psacct
поддержка:
CONFIG_BSD_PROCESS_ACCT
и CONFIG_BSD_PROCESS_ACCT_V3
включенныйpsacct
) пакет, как отмечено вышеВсе вышеупомянутое должно быть верным в CentOS 6, я проверил 5.x, и это не имеет CONFIG_BSD_PROCESS_ACCT_V3=y
, таким образом, необходимо было бы восстановить ядро для включения его.
Оригинал psacct-6.3.2
приблизительно 15 лет, версия Red Hat/CentOS бэкпортировала v3 и поддержку дисплея PID (я не могу протестировать его прямо сейчас, но это должно работать).
Проверять Вашу конфигурацию ядра:
zgrep BSD_PROCESS_ACCT /proc/config.gz /boot/config-`uname -r`
Можно использовать ps -ef
для рассмотрения дочернего pid родительский идентификатор является тем, который сделал разветвление или порождение. Вы могли использовать watch
запускать скрипт регулярно и делать значить Вас.
Можно настроить контрольную подсистему для входа ветвлений (и независимо от того, что другой системный вызов поражает воображение).
auditctl -a exit,always -S clone
fork()
, и использование удара( ... )
подоболочки. Ответ, обновленный для разъяснения. – mr.spuratic 14.02.2013, 11:06