Как я могу создать твердое для уничтожения процесса

Можно попробовать Получением Вещей GNOME (сократил GTG). Это поддерживает задачи меток с несколькими тегами и позволяет Вам выполнению запросов на основе тегов.

Например, !not @money !not @1 покажет задачи, которые не являются связанными деньгами или имеют высокий приоритет.

Я использую этот @1 тег для первоочередных задач, @2 для задач среднего приоритета и @3 для низкоприоритетных задач, но Вы свободны выбрать другую систему меток для приоритета.

GTG имеет сборку в календаре для выбора, запускаются/даты истечения срока.

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

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

10
13.12.2013, 01:01
2 ответа

Один подход мог быть должен использовать пространства имен PID:

Загрузите свою систему с a init=/some/cmd как параметр ядра, где /some/cmd разветвляет процесс в новом пространстве имен (CLONE_NEWPID) и выполнения /sbin/init в нем (это будет иметь PID 1 в том новом пространстве имен и pid 2 в корневом пространстве имен), затем в родителе, выполняют Вашу "программу".

Вы, вероятно, захотите способ управлять Вашей программой так или иначе (TCP или АБСТРАКТНЫЙ сокет Unix, например).

Вы, вероятно, захотите к mlock свою программу в памяти и закроете большинство ссылок на файловую систему так, чтобы это ни на что не полагалось.

Тот процесс не будет замечен от остальной части системы. Остальная часть системы будет в действительности работать как в контейнере.

Если тот процесс умрет, то ядро запаникует, который дает Вам дополнительную гарантию.

Неудобный побочный эффект, хотя то, что мы не будем видеть потоков ядра в выводе ps.

Как подтверждение концепции (использующий этот прием для начальной загрузки копию системы в qemu виртуальной машине):

Создайте a /tmp/init как:

#! /bin/sh -
echo Starting
/usr/local/bin/unshare -fmp -- sh -c '
  umount /proc
  mount -nt proc p /proc
  exec bash <&2' &
ifconfig lo 127.1/8
exec socat tcp-listen:1234,fork,reuseaddr system:"ps -efH; echo still running"

(Вам нужно unshare от последней версии util-linux (2.14)). Выше мы используем socat как "программа", которая просто отвечает на соединениях TCP на порте на 1234 с выводом ps -efH.

Затем загрузите свой VM как:

kvm -kernel /boot/vmlinuz-$(uname -r) -initrd /boot/initrd.img-$(uname -r) \
    -m 1024 -fsdev local,id=r,path=/,security_model=none \
    -device virtio-9p-pci,fsdev=r,mount_tag=r -nographic -append \
    'root=r rootfstype=9p rootflags=trans=virtio console=ttyS0 init=/tmp/init rw'

Затем мы видим:

Begin: Running /scripts/init-bottom ... done.
Starting
[...]
root@(none):/# ps -efH
UID        PID  PPID  C STIME TTY          TIME CMD
root         1     0  0 14:24 ?        00:00:00 bash
root         4     1  0 14:24 ?        00:00:00   ps -efH
root@(none):/# telnet localhost 1234
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
UID        PID  PPID  C STIME TTY          TIME CMD
root         2     0  0 14:24 ?        00:00:00 [kthreadd]
root         3     2  0 14:24 ?        00:00:00   [ksoftirqd/0]
[...]
root         1     0  2 14:24 ?        00:00:00 socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       204     1  0 14:24 ?        00:00:00   /usr/local/bin/unshare -fmp -- sh -c    umount /proc   mount -nt proc p /proc   exec bash <&2
root       206   204  0 14:24 ?        00:00:00     bash
root       212   206  0 14:25 ?        00:00:00       telnet localhost 1234
root       213     1  0 14:25 ?        00:00:00   socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       214   213  0 14:25 ?        00:00:00     socat tcp-listen:1234,fork,reuseaddr system:ps -efH; echo still running
root       215   214  0 14:25 ?        00:00:00       sh -c ps -efH; echo still running
root       216   215  0 14:25 ?        00:00:00         ps -efH
still running
Connection closed by foreign host.
root@(none):/# QEMU: Terminated
8
27.01.2020, 20:02
  • 1
    Но затем не могу, я могу просто изменить bootfile для не запуска/some/cmd? de la patrie –  Miheer 12.12.2013, 16:51
  • 2
    @Miheer, и Вы могли загрузиться от флеш-карты или установить другую операционную систему... Избегать, чтобы, необходимо было бы физически заблокировать вниз машину и BIOS и загрузчик и ядро и initrd (и запустили программу с этого initrd) на некотором устройстве только для чтения. Иначе, независимо от того, что Вы делаете, Вы будете всегда мочь снять жесткий диск и удалить вещь, которая запускает Ваш процесс. –  Stéphane Chazelas 12.12.2013, 16:57

Не уверенный, если это - конечное решение или если это - лучший способ сделать это. Мои мнения:

  • Изменить init так как это - первый процесс, если это умирает, все другие умирают также. Таким образом, Ваша машина только будет применима с ним.

  • Создайте модуль ядра и загрузите критические модули в зависимости от него (если он будет уничтожен, то он вызовет цепную реакцию как init пример).

  • Измените ядро для игнорирования, уничтожают запросы на определенный процесс.

Следует иметь в виду, что последние два будут работать в привилегированном режиме (который очень ограничен с точки зрения, освобождает и так один). Изменение init будет работать в пространстве пользователя, разрешающем Вам использовать много функций его.

1
27.01.2020, 20:02
  • 1
    Не уверенный, если это действительно безопасно. –  Tinti 12.12.2013, 15:55
  • 2
    И как остановить процесс? –  Miheer 12.12.2013, 16:03
  • 3
    Это должно было бы быть сделано в самом программном обеспечении. Необходимо было бы создать способ запросить программное обеспечение остановиться. Позволяет предполагают, что это имеет поток, который проверяет файл как:/var/lib/stop.request. Если этот файл содержит пароль X, программное обеспечение останавливает РАБОТУ, которую это делает, и войдите в своего рода режим ожидания. Вы могли повторно включить его путем создания другого файла/var/lib/start.request. –  Tinti 12.12.2013, 16:08

Теги

Похожие вопросы