TGViewer
Dev Easy Notes Dev Easy Notes @dev_easy_notes · 2.91K subscribers
Post #140 2.29K
Поговорим о демонах. В Unix системах есть программы которые работают в фоне со своей уникальной целью. По большей частью это служебные программы, написанные на низкоуровневом языке, гарантирующие работу какой-то подсистемы. Такие программы, написанные на низкоуровневом языке вроде Си называют демонами. Интересная история названия, почему именно демоны? Создатели Unix фанатели от греческой мифологии. В греческой мифологии Демон это персонаж выполняющий задачи, которыми не хотят заниматься боги.

Когда система стартует, она запускает кучу нативных демонов. Например, демон под названием netd, основная задача которого, следить за состоянием сети и сообщать об этом системному сервису. Определить демон ли программа можно по названию, у демонов есть следующая конвенция в названии {имя демона}d. Суть в том, что демоны предоставляют данные системным сервисам.

В предыдущих постах я упоминал системные сервисы. Что за системные сервисы? Вообще сервис как вы помните это основной компонент приложения. Это значит что приложение может быть лишь из одного этого компонента. Легко сделать приложение в котором будет лишь один сервис и ничего больше. Так вот в грубом представлении системные сервисы и есть такие приложения с одним сервисом.

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

В итоге мы имеем нативного демона который крутится в своем фоновом процессе, а также системный сервис работающий в другом процессе. Как передать данные из нативного демона этому сервису?

Вариантов куча, но сразу скажу что в Android используется Unix Domain Socket (UDS). Практически этот тот же самый сокет который мы используем для передачи данных по сети, но оптимизированный для передачи данных на одной машине. Этот сокет не использует сетевую карту, что избавляет от проверок IP и всего что связано с сетью. UDS для передачи данных использует файл. Это один из самых базовых способов передачи данных между процессами. Как понятно из названия эти сокеты есть во всех Unix системах, в том числе и в Android.

Однако у UDS есть два очень жирных минуса. Во-первых, способ достаточно медленный, т.к мы все данные передаем через файл, что несет свои издержки связанные с дисками. Во-вторых, способ нифига не защищенный, и это опять-таки из-за того что данные передаются через обычный файл. Конечно, для нативных системных сервисов это относительно безопасно, т.к обычное приложение не сможет прочитать из этого файла благодаря системе прав, о которой говорили ранее.

Поэтому для обычных приложений нет никакого смысла использовать UDS. Каким образом тогда у нас передаются данные между приложениями, и как мы получаем данные с системных сервисов которые работают в других процессах? Через Binder о котором поговорим далее.
  • 👍 18
  • 🔥 8
  • ❤ 1
More from @dev_easy_notes
  1. Sep 24, 2026На всякий случай напомню напомню, если такую хуйню видите, сразу в бан кидаете. Вы скорее…
  2. Aug 4, 2026Короче, поясню, я давно ничего не пишу, потому что заебался) возможно я скоро вернусь, как…
  3. Aug 4, 2026Post #596
  4. Apr 17, 2026Меня вот что еще дико бесит, через год я буду уже как 10 лет в индустрии и все равно, кажд…
  5. Apr 15, 2026video post
  6. Apr 9, 2026Как оценить работу модели? Часто вижу высказывания в стиле: вот новый клод стал тупее, или…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →