Рубрика «fork»

...или о fork() в двух словах.

Как люди решают задачи

Обычно у каждой задачи есть одно простое решение, которое воспринимается всеми как правильное. Люди воспринимают такое решение правильным либо исходя из личного опыта¹; исходя из опыта других людей² или просто не задумываясь о правильности³. И самое удивительное, что мир не взорвался, никто (массово) от этого не умер, код работает и приносит деньги.

¹ "всегда так пишу код, никто не умер"
² "копирую код из stack overflow который набрал больше всех плюсов"
³ "копирую первый попавшийся код из stack overflow"

Читать полностью »

Эх, fork(). Одни процессы порождают другие. Кажется, у меня есть история об этом.

Форк может потерпеть неудачу. Понимаете? В самом деле, понимаете? Это очень серьёзно. Форк может завершиться с ошибкой. Так же, как и malloc. Нечасто, но когда такое происходит, нельзя просто взять и игнорировать это. Вы должны что-то предпринять в таком случае.

Похоже, всем известно, что fork возвращает дочернему процессу 0, а родителю некоторое положительное число — pid ребенка. Он выдаёт этот номер, который используется позже.

Угадайте, что происходит, когда вы не проверяете ответ на ошибку? Да, вы возьмёте "-1" (ошибка форка) как pid.
Читать полностью »

Потребовалось измерить ток потребления одного устройства
+ хранить полученные значения в таблице БД (PostgreSQL)

Первые 5 минут гугления показали — почти все производители полупроводников, имеют красивые решения, на одном кристалле
Сложные схемы на ОУ, остались далеко в прошлом

Выбор пал на INA260
Напряжение до 36v, простой для монтажа корпус, компромиссная стоимость
Но самый решающий аргумент, он уже валялся в тумбе :D Среди прочих образцов
Настало время его задействовать

Включаемая схема ничем не отличается от приведенной в даташите
Ее не высокая сложность, позволяет все собрать на коленке
image
Читать полностью »

В ноябре 2017-го, произойдет действительно важный хардфорк bitcoin, а не мусорный хайп-форк bitcoin cash (весь смысл которого — принципиальная не поддержка segwit и 8мб лимит бока), прошедший первого августа, единственной целью которого, по моему мнению, было отвлечение внимания и сил сообщества от реальной проблемы. Номер блока старта segwit2x стал точно известен — это будет блок 494 784.

Напомню коротко, в феврале 2016-го, значимыми участниками, включая bitcoin core, было подписано соглашение Bitcoin Roundtable Consensus in Hong-Kong, в котором описывался поэтапно процесс внедрения нового формата транзакций segregated withness и увеличение лимита размера блока до 2мб но не больше 4мб.

Вне зависимости от того, кто виноват, полагаю обе стороны вели себя более чем неразумно (я считаю большая часть вины на майнерах), условия это соглашения не были выполнены в срок, и через год — в мае 2017-го, уже без участия представителей bitcoin core было подписано новое соглашение — Bitcoin Scaling Agreement in New York, подразумевающее фактически то же самое но в порядке, не совместимом с планом, проводимым командой bitcoin core.

По факту происходит попытка отъема управляющих и координирующих функций у команды bitcoin core.

Читать полностью »

Звёздные войны. Эпизод III: Месть ситхов. Сцена с выступлением, пока еще, канцлера Палпатина в сенате.

Криптовалюта Ethereum стоит на историческом распутье, которое оставит неизгладимый след в её истории. О «чёрных списках», централизованной «децентрализованной автономности» и почему сообщество с такой радостью, рвением и беззаботностью открывает ящик регуляции криптовалюты, тем самым забивая гвозди в гроб Ethereum.
Читать полностью »

Доброго времени суток всем.
Неожиданное поведение openssl_random_pseudo_bytes() приводящее к фатальной потере криптостойкости - 1
Недавно в одном из проектов мы столкнулись со следующей проблемой — функция openssl_random_pseudo_bytes() выдавала дублирующиеся псевдослучайные последовательности!

Этого не может быть, потому что этого не может быть никогда! — Скажет любой, кто читал документацию этой функции. И, да, $crypto_strong исправно выдавал TRUE.

И тем не менее — ошибки уникальности при вставке в базу сыпались пачками и лог подтверждал — 32-байтные последовательности генерировались повторно через разные интервалы, от суток до недели. Расследование заняло целый месяц. Сейчас я на 99% уверен, что причина найдена — но буду благодарен, если читатели подтвердят или опровергнут мои выводы.

Читать полностью »

Послушайте!
Ведь, если звезды зажигают — значит — это кому-нибудь нужно?

В. В. Маяковский, 1914

Я занимаюсь программированием для встроенных систем, и данную статью решил написать для того, чтобы лучше разобраться с проблемой использования системных вызовов fork() и vfork(). Второй из них часто советуют не использовать, но ясно, что появился он не просто так.

Давайте разберёмся, когда и почему лучше использовать тот или иной вызов.

В качестве бонуса будет приведено описание реализаций vfork()/fork() в нашем проекте. Прежде всего, мой интерес связан с применением этих вызовов во встроенных системах, и главной особенностью приведённых реализаций является отсутствие виртуальной памяти. Возможно, хорошо разбирающиеся в системном программировании и во встроенных системах, дадут советы и поделятся опытом.

Кому интересно, прошу под кат.
Читать полностью »

Мой предыдущий пост был о том, почему я думаю, что копирование при записи — будущее параллельных вычислений (англ.). На следующий день я попытался поделиться этой идеей с некоторыми коллегами, но на меня смотрели пустые глаза. Это навело меня на мысль, что большинство программистов на самом деле не знают о техниках копирования при записи, как они работают (и работают ли) и для какого рода проблем они наиболее подходят. Так что я решил написать несколько постов об этом. В этом первом посте, я расскажу поведаю об основной идее организации данных при копировании при записи.

Традиционные структуры данных изменяемы. Давайте взглянем на простейшее двоичное дерево поиска. Например:

Копирование при записи (Copy on write), что это?
Читать полностью »

Доброго всем настроения!
Прочитал я вот эту статью, и решил немного сам взять в руки шашки, и попробовать сделать что-нибудь приятное для себя и для других.
Мой скрипт не делает никаких полезных вещей, но думаю для более менее начинающих писателей на bash он чему-нибудь научит, да и если будут комментарии, то и я научусь от тех людей которые укажут на мои ошибки.

Вводная

Скрипт будет запускаться в фоне демоном. Сразу думаю надо договориться что сам процесс который будет висеть в памяти постоянно я буду называть «Родителем». Родитель будет в определенном каталоге искать определенный файл, и если он существует, то файл будет удален и запущен процесс, который я буду называть «Потомок», целью которого будет просто спать какое-то время, и после чего завершиться. Но Родитель не должен будет запускать более одного Потомка в единицу времени. В принципе, если Вы прочитали вышеуказанную статью, то смысл я думаю понятен.
Читать полностью »

Параллельные программы на PHP

В PHP есть ровно один «нормальный» способ писать приложения, которые используют несколько ядер/процессоров — это fork(). О прикладном использовании системного вызова fork() в языке PHP и расширения pcntl я и расскажу. В качестве примера мы напишем достаточно быструю параллельную реализацию grep (со скоростью работы, аналогичной find . -type f -print0 | xargs -0 -P $NUM_PROCS grep $EXPR).
Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js