LINUX.ORG.RU

Как дёргать коллбэки по таймеру? Они не дёргаются!

 


0

2

в одном дочернем процессе устанавливается переменная, в другом дочернем проессе она должна быть видна, но этого не происходит.

глобальная переменная array устанавливается до вызова main, как вы видите по sleep'у, но после вызова main её как будто бы и нет. WTF???

создаётся ощущение, что функция выполняется заблаговременно, вставка eval не помогла, как ещё можно вызвать main, чтобы вывести переменную?

#!/bin/bash

init() {
	array=("Spoofing" "Voglea")
}

main() {
	if [ -z "${array[@]}" ]; then
		echo ВОТ ТУТ, ТУТ БЫЛА! И ГДЕ ОНА???
	else
		printf '%s\n' "${array[@]}"
	fi
}

(
sleep 1

init
) &

(
sleep 3

main
) &

sleep 5

Перемещено Pinkbyte из general

★★★★★

Скобочки — это subshell. Отдельный процесс.

(Амперсанд сам по себе тоже приводит к запуску отдельного процесса.)

Короче, в bash нет многопоточности.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)

придумал костыль.

буду сбрасывать дамп переменных в файл в одном процессе, а в другом его подгружать через eval.

Spoofing ★★★★★
() автор топика

ять! вы не представляете какого это, угробить 3 дня разработки на шнягу на баше в 1000 строк, а потом оказалось что ВСЁ надо переписывать из-за того что один дочерний процесс не может расшарить переменную другому дочернему процессу в баше. ять.

Spoofing ★★★★★
() автор топика
Ответ на: комментарий от Spoofing

Дочерний родительскому - очевидно не может, для этого нужны какие-то нетривиальные способы обмена данными между процессами (POSIX MQ - уже нетривиальный).

А родительский дочернему - запросто.

tiandrey ★★★★★
()
Ответ на: комментарий от Spoofing

Таки всё?
Значения лучше передавать по stdin/stdout. Короче echo/read. Что-то более сложное - временные файлы. Если прям уж многопоточность нужна - пайпы.

А вообще, на баше 1000 строк... Может имеет смысл вгянуть на какой-то Питон? Как по мне, все, что больше 500 строк - не для баша.

Kroz ★★★★★
()

так это... export MYVAR=myvalue

anonymous
()

зачем писать так:

( ) &

Когда так не общепринято. Предсказуемый код более понятен. Есть наверное более изящный способ.

Никто тебе не гарантирует что «слипами» ты добьешься гарантированной очередности выполнения. Это ассинхронщина сынок, причем грубая + буферизация всей страны.

Насчет export то-же правильно подсказывают в общем-то.

Ищи подходящий IPC. Hints: memcache, rabbitmq например.

Bash это легковесный клей. В конце концов можно на файлах запилить.

Можно наконец задаться вопросом: у существует ли шелл-комманда или утилита, отправляющая сообщение процессу. Ну или аналоги. Сигналы?

anonymous
()
Ответ на: комментарий от Spoofing

Если скрипт становится больше 10 строчек (условно), время писать на нормальном языке.

anonymous
()
Ответ на: комментарий от intelfx

а знаешь сколько в индусском коде венды строк? тебе есть куда расти

anonymous
()
Ответ на: комментарий от Spoofing

Ахаха, наконец-то костыли острыми ржавыми краями повредили твой анус. ССЗБ.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.