Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма UNIXΒ». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 48

Автор АндрСй РобачСвский

 if (rlm.rlim_max == RLIM_INFINITY)

  printf("infinite \n");

 else

  printf("%10ld\n", rlm.rlim_max);

}


main() {

 disp_limit(RLIMIT_CORE, "RLIMIT_CORE");

 disp_limit(RLIMIT_CPU, "RLIMIT_CPU");

 disp_limit(RLIMIT_DATA, "RLIMIT_DATA");

 disp_limit(RLIMIT_FSIZE, "RLIMIT_FSIZE");

 disp_limit(RLIMIT_NOFILE, "RLIMIT_NOFILE");

 disp_limit(RLIMIT_STACK, "RLIMIT_STACK");

 /* BSD */

#ifdef RLIMIT_NPROC

 disp_limit(RLIMIT_NPROC, "RLIMIT_NPROC");

#endif

 /* BSD */

#ifdef RLIMIT_RSS

 disp_limit(RLIMIT_RSS, "RLIMIT_RSS");

#endif

 /* BSD */

#ifdef RLIMIT_MEMLOCK

 disp_limit(RLIMIT_MEMLOCK, "RLIMIT_MEMLOCK");

#endif

 /* System V */

#ifdef RLIMIT_VMEM

 disp_limit(RLIMIT_VMEM, "RLIMIT_VMEM");

#endif

}

Запуск ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΠΎΠ΄ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы Solaris 2.5 даст ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹:

$ Π°.out

RLIMIT_CORE   infinite   infinite

RLIMIT_CPU    infinite   infinite

RLIMIT_DATA   2147479552 2147479552

RLIMIT_FSIZE  infinite   infinite

RLIMIT_NOFILE 64         1024

RLIMIT_STACK  8388608    2147479552

RLIMIT_VMEM   infinite   infinite

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ

Π’ качСствС Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ»Π»ΡŽΡΡ‚Ρ€Π°Ρ†ΠΈΠΈ ΠΊ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠΈΠΌΡΡ Π²Ρ‹ΡˆΠ΅ вопросам приводятся Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π΄Π²ΡƒΡ… ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π² достаточной стСпСни Π΄Π΅ΠΌΠΎΠ½ΡΡ‚Ρ€ΠΈΡ€ΡƒΡŽΡ‚ практичСскоС ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎΠ³ΠΎ интСрфСйса UNIX. Π—Π°ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π·Π°ΠΊΠΎΠ½Ρ‡Π΅Π½Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ β€” Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ… мСстах участки ΠΊΠΎΠ΄Π° Π½Π°ΠΌΠ΅Ρ€Π΅Π½Π½ΠΎ ΠΎΠΏΡƒΡ‰Π΅Π½Ρ‹, Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ свСдСна ΠΊ ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌΡƒ. Π—Π°Π΄Π°Ρ‡Π΅ΠΉ являлось ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΏΡ€ΠΈΠ½Ρ†ΠΈΠΏ взаимодСйствия ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ с ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмой ΠΈ идСологию программирования Π² UNIX. Рассмотрим Π΄Π²Π° Π΄ΠΈΠ°ΠΌΠ΅Ρ‚Ρ€Π°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΡ‚ΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ‹Ρ… прилоТСния β€” Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ-Π΄Π΅ΠΌΠΎΠ½ ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π½Ρ‹ΠΉ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€.

Π”Π΅ΠΌΠΎΠ½

Π”Π΅ΠΌΠΎΠ½Ρ‹ ΠΈΠ³Ρ€Π°ΡŽΡ‚ Π²Π°ΠΆΠ½ΡƒΡŽ Ρ€ΠΎΠ»ΡŒ Π² Ρ€Π°Π±ΠΎΡ‚Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΎΠΉ систСмы. Достаточно Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π° ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π² систСму, доступ ΠΏΠΎ сСти, использованиС систСмы ΠΏΠ΅Ρ‡Π°Ρ‚ΠΈ ΠΈ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹, β€” всС это обСспСчиваСтся ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π΄Π΅ΠΌΠΎΠ½Π°ΠΌΠΈ β€” Π½Π΅ΠΈΠ½Ρ‚Π΅Ρ€Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°ΠΌΠΈ, ΡΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌΠΈ собствСнныС сСансы (ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹) ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΌΠΈ Π½ΠΈ ΠΎΠ΄Π½ΠΎΠΌΡƒ ΠΈΠ· ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΡΠΊΠΈΡ… сСансов (Π³Ρ€ΡƒΠΏΠΏ).

НСкоторыС Π΄Π΅ΠΌΠΎΠ½Ρ‹ Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‚ постоянно, Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ яркий ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Π΄Π΅ΠΌΠΎΠ½Π° β€” процСсс init(1M), ΡΠ²Π»ΡΡŽΡ‰ΠΈΠΉΡΡ ΠΏΡ€Π°Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»Π΅ΠΌ всСх ΠΏΡ€ΠΈΠΊΠ»Π°Π΄Π½Ρ‹Ρ… процСссов Π² систСмС. Π”Ρ€ΡƒΠ³ΠΈΠΌΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ ΡΠ²Π»ΡΡŽΡ‚ΡΡ cron(1M), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΉ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Π΅ ΠΌΠΎΠΌΠ΅Π½Ρ‚Ρ‹ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, inetd(1M) ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ доступ ΠΊ сСрвисам систСмы ΠΈΠ· сСти, ΠΈ sendmail(1M), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΎΡ‚ΠΏΡ€Π°Π²ΠΊΡƒ элСктронной ΠΏΠΎΡ‡Ρ‚Ρ‹.

ΠŸΡ€ΠΈ описании взаимодСйствия процСссов с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ "Π“Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ сСансы", ΠΎΡ‚ΠΌΠ΅Ρ‡Π°Π»ΠΎΡΡŒ особоС мСсто Π΄Π΅ΠΌΠΎΠ½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‚ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π² ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠΈ Π΄Π΅ΠΌΠΎΠ½ΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΡΡ„ΠΎΡ€ΠΌΡƒΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ряд ΠΏΡ€Π°Π²ΠΈΠ», ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… ΠΈΡ… Π½ΠΎΡ€ΠΌΠ°Π»ΡŒΠ½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ:

1. Π”Π΅ΠΌΠΎΠ½ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π³ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π° сигналы управлСния заданиями, посылаСмыС Π΅ΠΌΡƒ ΠΏΡ€ΠΈ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π° с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. Начиная с Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Π΄Π΅ΠΌΠΎΠ½ снимаСт Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ с ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ, Π½ΠΎ Π½Π° Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠΌ этапС запуска Π΅ΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒΡΡ вывСсти Ρ‚ΠΎ ΠΈΠ»ΠΈ ΠΈΠ½ΠΎΠ΅ сообщСниС Π½Π° экран.

2. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ всС ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹ (Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы), особСнно стандартныС ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π²Π²ΠΎΠ΄Π°/Π²Ρ‹Π²ΠΎΠ΄Π°. МногиС ΠΈΠ· этих Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ собой Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ устройства, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ Π·Π°ΠΊΡ€Ρ‹Ρ‚Ρ‹, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· систСмы. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚ΡΡ, Ρ‡Ρ‚ΠΎ Π΄Π΅ΠΌΠΎΠ½ остаСтся Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΈ послС Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ "ΠΏΠΎΠΊΠΈΠ½ΡƒΠ»" UNIX.

3. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ½ΡΡ‚ΡŒ Π΅Π³ΠΎ Π°ΡΡΠΎΡ†ΠΈΠ°Ρ†ΠΈΡŽ с Π³Ρ€ΡƒΠΏΠΏΠΎΠΉ процСссов ΠΈ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΌ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ. Π­Ρ‚ΠΎ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ Π΄Π΅ΠΌΠΎΠ½Ρƒ ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ сигналов, Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ (SIGINT ΠΈΠ»ΠΈ SIGHUP), Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ Π½Π°ΠΆΠ°Ρ‚ΠΈΠΈ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½Ρ‹Ρ… клавиш ΠΈΠ»ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΈΠ· систСмы.

4. Π‘ообщСния ΠΎ Ρ€Π°Π±ΠΎΡ‚Π΅ Π΄Π΅ΠΌΠΎΠ½Π° слСдуСт Π½Π°ΠΏΡ€Π°Π²Π»ΡΡ‚ΡŒ Π² ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΆΡƒΡ€Π½Π°Π» с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ syslog(3), β€” это Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΉ способ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡ΠΈ сообщСний ΠΎΡ‚ Π΄Π΅ΠΌΠΎΠ½Π°.

5. ΠΠ΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ. Если этого Π½Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ, Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, допустим, находится Π½Π° ΠΏΡ€ΠΈΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС, послСднюю нСльзя Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠΎΠ½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. Π‘Π°ΠΌΡ‹ΠΌ Π½Π°Π΄Π΅ΠΆΠ½Ρ‹ΠΌ Π²Ρ‹Π±ΠΎΡ€ΠΎΠΌ являСтся ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³, всСгда ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‰ΠΈΠΉ ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ Ρ„Π°ΠΉΠ»ΠΎΠ²ΠΎΠΉ систСмС.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ скСлСт ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹-Π΄Π΅ΠΌΠΎΠ½Π°:

#include <stdio.h>

#include <syslog.h>

#include <signal.h>

#include <sys/types.h>

#include <sys/param.h>

#include <sys/resource.h>


main(int argc, char **argv) {

 int fd;

 struct rlimit flim;

 /* Если Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс β€” init, ΠΌΠΎΠΆΠ½ΠΎ Π½Π΅ Π±Π΅ΡΠΏΠΎΠΊΠΎΠΈΡ‚ΡŒΡΡ

    Π·Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΡŒΠ½Ρ‹Π΅ сигналы. Если Π½Π΅Ρ‚ β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ

    сигналы, связанныС с Π²Π²ΠΎΠ΄ΠΎΠΌ/Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ Π½Π° Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»

    Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠ³ΠΎ процСсса: SIGTTOU, SIGTTIN, SIGTSTP */

 if (getppid() != 1) {

  signal(SIGTTOU, SIG_IGN);

  signal(SIGTTIN, SIG_IGN);

  signal(SIGTSTP, SIG_IGN);


  /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠ±ΡΡ‚Π²Π΅Π½Π½ΡƒΡŽ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈ сСанс,

     Π½Π΅ ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠ΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π΅Π³ΠΎ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π°. Однако Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Π³Ρ€ΡƒΠΏΠΏΡ‹ ΠΈ

     сСанса ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ процСсс, Ссли ΠΎΠ½ Π΅Ρ‰Π΅ Π½Π΅ являСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ.

     ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСдыстория запуска Π΄Π°Π½Π½ΠΎΠΉ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ нСизвСстна,

     Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° гарантия, Ρ‡Ρ‚ΠΎ наш процСсс Π½Π΅ являСтся Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ.

     Для этого ΠΏΠΎΡ€ΠΎΠΆΠ΄Π°Π΅ΠΌ Π΄ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс. Π’.ΠΊ. Π΅Π³ΠΎ PID ΡƒΠ½ΠΈΠΊΠ°Π»Π΅Π½,

     Ρ‚ΠΎ Π½ΠΈ Π³Ρ€ΡƒΠΏΠΏΡ‹, Π½ΠΈ сСанса с Ρ‚Π°ΠΊΠΈΠΌ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π΅ сущСствуСт,

     Π° Π·Π½Π°Ρ‡ΠΈΡ‚ Π½Π΅Ρ‚ ΠΈ Π»ΠΈΠ΄Π΅Ρ€Π°. ΠŸΡ€ΠΈ этом Ρ€ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΡΠΊΠΈΠΉ процСсс

     Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ ΡƒΠΆΠ΅ Π½Π΅ Π½ΡƒΠΆΠ΅Π½.

     БущСствуСт Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСобходимости пороТдСния

     Π΄ΠΎΡ‡Π΅Ρ€Π½Π΅Π³ΠΎ процСсса. Если Π΄Π΅ΠΌΠΎΠ½ Π±Ρ‹Π» Π·Π°ΠΏΡƒΡ‰Π΅Π½ ΠΈΠ· ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки

     ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° shell Π½Π΅ Π² Ρ„ΠΎΠ½ΠΎΠ²ΠΎΠΌ Ρ€Π΅ΠΆΠΈΠΌΠ΅,

     послСдний Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΡ выполнСния Π΄Π΅ΠΌΠΎΠ½Π°,

     ΠΈ Ρ‚Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» Π±ΡƒΠ΄Π΅Ρ‚ Π·Π°Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²Π°Π½.

     ΠŸΠΎΡ€ΠΎΠΆΠ΄Π°Ρ процСсс ΠΈ Π·Π°Π²Π΅Ρ€ΡˆΠ°Ρ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ родитСля,

     ΠΈΠΌΠΈΡ‚ΠΈΡ€ΡƒΠ΅ΠΌ для ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠ³ΠΎ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠ΅

     Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π΅ΠΌΠΎΠ½Π°, послС Ρ‡Π΅Π³ΠΎ shell Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ своС ΠΏΡ€ΠΈΠ³Π»Π°ΡˆΠ΅Π½ΠΈΠ΅ */

  if (fork () !=0)

   exit(0); /* Π ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒ Π·Π°ΠΊΠ°Π½Ρ‡ΠΈΠ²Π°Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ */

   /* Π”ΠΎΡ‡Π΅Ρ€Π½ΠΈΠΉ процСсс с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ систСмного Π²Ρ‹Π·ΠΎΠ²Π°

      становится Π»ΠΈΠ΄Π΅Ρ€ΠΎΠΌ Π½ΠΎΠ²ΠΎΠΉ Π³Ρ€ΡƒΠΏΠΏΡ‹, сСанса ΠΈ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚

      ассоциированного Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π° */[28]

 }

 /* Π’Π΅ΠΏΠ΅Ρ€ΡŒ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΊΡ€Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Π΅ Ρ„Π°ΠΉΠ»Ρ‹. Π—Π°ΠΊΡ€ΠΎΠ΅ΠΌ

    всС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Ρ‹Π΅ дСскрипторы. МаксимальноС число

    ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… Ρ„Π°ΠΉΠ»ΠΎΠ² ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getrlimit */

 getrlimit(RLIMIT_NOFILE, &flim);

 for (fd = 0; fd < flim.rlim_max; fd++)

  close(fd);

 /* Π‘ΠΌΠ΅Π½ΠΈΠΌ Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³ Π½Π° ΠΊΠΎΡ€Π½Π΅Π²ΠΎΠΉ */

  chdir("/");

 /* Заявим ΠΎ сСбС Π² систСмном ΠΆΡƒΡ€Π½Π°Π»Π΅. Для этого сначала

    установим ΠΎΠΏΡ†ΠΈΠΈ вСдСния ΠΆΡƒΡ€Π½Π°Π»Π°: каТдая запись Π±ΡƒΠ΄Π΅Ρ‚

    ΠΏΡ€Π΅Π΄Π²Π°Ρ€ΡΡ‚ΡŒΡΡ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ PID Π΄Π΅ΠΌΠΎΠ½Π°, ΠΏΡ€ΠΈ нСвозмоТности

    записи Π² ΠΆΡƒΡ€Π½Π°Π» сообщСния Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π½Π° консоль,

    источник сообщСний ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΠΌ ΠΊΠ°ΠΊ "систСмный Π΄Π΅ΠΌΠΎΠ½"

    (см. ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ ΠΊ функциям вСдСния ΠΆΡƒΡ€Π½Π°Π»Π° Π½ΠΈΠΆΠ΅). */

 openlog("Π‘ΠΊΠ΅Π»Π΅Ρ‚ Π΄Π΅ΠΌΠΎΠ½Π°" , LOG_PID | LOG_CONS, LOG_DAEMON);

 /* ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌΡΡ */

 syslog(LOG_INFO, "Π”Π΅ΠΌΠΎΠ½ Π½Π°Ρ‡Π°Π» ΠΏΠ»ΠΎΠ΄ΠΎΡ‚Π²ΠΎΡ€Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ...");

 closelog();

 /* Π”Π°Π»Π΅Π΅ слСдуСт тСкст ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Ρ€Π΅Π°Π»ΠΈΠ·ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ

    Π΄Π΅ΠΌΠΎΠ½Π°. Π­Ρ‚Π° Ρ‡Π°ΡΡ‚ΡŒ прСдоставляСтся Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΡŽ для собствСнной

    Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. */

 ...

}

Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ использовалось Π΅Ρ‰Π΅ Π½Π΅ ΠΎΠ±ΡΡƒΠΆΠ΄Π°Π²ΡˆΠ°ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ систСмного ΠΆΡƒΡ€Π½Π°Π»Π° сообщСний Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π€ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ сообщСний являСтся syslog(3), ΠΎΡ‚ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ сообщСниС Π΄Π΅ΠΌΠΎΠ½Ρƒ систСмного ΠΆΡƒΡ€Π½Π°Π»Π° syslogd(1M), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π² свою ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ Π»ΠΈΠ±ΠΎ дописываСт сообщСния Π² систСмный ΠΆΡƒΡ€Π½Π°Π», Π»ΠΈΠ±ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ Π½Π° ΠΈΡ… консоль, Π»ΠΈΠ±ΠΎ пСрСнаправляСт Π² соотвСтствии со списком ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ Π΄Π°Π½Π½ΠΎΠΉ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ систСмы. ΠšΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½Ρ‹ΠΉ ΠΏΡƒΠ½ΠΊΡ‚ назначСния опрСдСляСтся ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹ΠΌ Ρ„Π°ΠΉΠ»ΠΎΠΌ (/etc/syslog.conf). Ѐункция ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅:

#include <syslog.h>


void syslog(int priority, char *logstring, /* ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹*/...);

ΠšΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΡΠΎΠΎΠ±Ρ‰Π΅Π½ΠΈΡŽ logstring назначаСтся ΠΏΡ€ΠΈΠΎΡ€ΠΈΡ‚Π΅Ρ‚, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€ΠΎΠΌ priority. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ значСния этого ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π° Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‚: