static pthread_once_t once = PTHREAD_ONCE_INIT;
static void destructor(void* db) { delete (DataBlock*)db; }
static void once_creator(void) {
pthread_key_create(&key, destructor);
}
void* threadfunc(void* data) {
// Π½Π°Π΄Π»Π΅ΠΆΠ°ΡΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠ°ΡΠΊΠΈΡΡΠ΅ΠΌ ΡΠΈΠ³Π½Π°Π»Ρ
// ...
// ΡΡΠΎ ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΈΠ· N
pthread_once(&once, once_creator);
DataBlock* pdb = new DataBlock(...);
pthread_setspecific(key, pdb);
// Π’Π΅ΠΏΠ΅ΡΡ ΠΏΠΎΡΠΎΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π΄Π°Π½Π½ΡΠΌΠΈ *pdb, ΠΊΠ°ΠΊ ΠΈ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΠΌΠΈ!
// ΡΠΈΠΊΠ» ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΏΡΠΈΡ ΠΎΠ΄ΡΡΠΈΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²:
while (true) pause();
}
ΠΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈ ΡΠΎΡ ΠΆΠ΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π΄Π»Ρ Π²ΡΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²; ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠ΄Π½ΠΈ ΠΈ ΡΠ΅ ΠΆΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ, Π½ΠΎ Π½Π°Π΄ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠΌΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ . ΠΠ°Π΄ ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠΌ Π΄Π°Π½Π½ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Β«ΡΠ·Π½Π°Π΅ΡΒ» ΠΈΠ· ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° ΠΏΠΎΡΠΎΠΊΠ°, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ½ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ:
static void handler(int signo, siginfo_t* info, void* context) {
DataBlock* pdb = (DataBlock*)pthread_getspecific(key);
// Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π΄Π»Ρ ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ...
}
β’ Π’Π΅ΠΏΠ΅ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΠ· Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΡΠΎΡΠ΅ΡΡΠ° (Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π²ΡΠ±ΡΠ°Π½ Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ - ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠΌ ΡΠΈΠ³Π½Π°Π»Π° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, Π΄Π°ΠΆΠ΅ Π½Π΅ ΡΡΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°), ΡΡΠ΅Π±ΡΠ΅ΠΌΠΎΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Π²ΠΎΠ·Π±ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ΠΌ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ ΡΠΈΠ³Π½Π°Π»Π°:
sigqueue(getpid(), SIGRTMIN + K, val);
ΠΡΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ΅Π»Π΅ΡΠ½Π°Ρ ΡΡ Π΅ΠΌΠ°, Π½ΠΎ Π½Π° Π΅Π΅ ΠΎΡΠ½ΠΎΠ²Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΡΡΠΎΠΈΡΡ ΡΠ°Π·Π²ΠΈΡΡΠ΅ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ (ΠΏΡΠΈΠΌΠ΅Ρ Π²Π·ΡΡ ΠΈΠ· ΡΠ°Π±ΠΎΡΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ).
ΠΠ° ΠΏΡΠ΅Π΄Π΅Π»Ρ POSIX: ΡΠΈΠ³Π½Π°Π»Ρ Π² ΡΠ΅ΡΠΈ
Π ΡΠ΅ΠΏΠ΅ΡΡ, Β«Π½Π° Π·Π°ΠΊΡΡΠΊΡΒ», ΠΏΠΎΡΠΌΠΎΡΡΠΈΠΌ ΡΠΏΡΠ°Π²ΠΎΡΠ½ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΏΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ kill (ΠΏΠΎΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π»). ΠΡ, Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ, ΠΏΠΎΠΌΠ½ΠΈΡΠ΅, ΡΡΠΎ Π² QNX Π΅ΡΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½Π°Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠΏΡΠ°Π²ΠΊΡ ΠΏΠΎ Π»ΡΠ±ΠΎΠΉ ΠΊΠΎΠΌΠ°Π½Π΄Π΅ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ # use <ΠΈΠΌΡ-ΠΊΠΎΠΌΠ°Π½Π΄Ρ>. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈ Π² Π»ΡΠ±ΠΎΠ΅ ΡΠ²ΠΎΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π²ΡΡΡΠΎΠΈΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠ°ΠΊΡΠΈΠ²Π½ΠΎΠΉ ΡΠΏΡΠ°Π²ΠΊΠΈ. ΠΠ°ΠΊ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ, ΠΎΠΏΠΈΡΠ°Π½ΠΎ Π² [4]. ΠΡΠ°ΠΊ:
# use kill
kill - terminate or signal processes (POSIX)
kill [-signal_name|-signal_number] pid ...
kill -l
Options:
-signal_name Symbolic name of signal to send
-signal_number Integer representing a signal type
-l List symbolic signal names
-n node Kill processes on the specified node.
(/bin/kill only)
Where:
Valid signal names are:
SIGNULL SIGHUP SIGINT SIGQUIT SIGILL SIGTRAP
SIGIOT SIGABRT SIGEMT SIGFPE SIGKILL SIGBUS
SIGSEGV SIGSYS SIGPIPE SIGALRM SIGTERM SIGUSR1
SIGUSR2 SIGCHLD SIGPWR SIGWINCH SIGURG SIGPOLL SIGSTOP SIGTSTP
SIGCONT SIGVTALARM SIGTTIN SIGTTOU
Note:
kill is also available as a shell builtin
ΠΠ΄Π΅ΡΡ Π½Π°Ρ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΡΡΡΠΏΡΠΈΠ·, ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΡ Π²ΡΠ΄Π΅Π»ΠΈΠ»ΠΈ Π² ΠΏΠΎΠΊΠ°Π·Π°Π½Π½ΠΎΠΌ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ΅ ΠΆΠΈΡΠ½ΡΠΌ ΡΡΠΈΡΡΠΎΠΌ. Π Π³ΠΎΠ²ΠΎΡΠΈΡ ΡΡΠ° ΡΡΡΠΎΠΊΠ° ΠΎ ΡΠΎΠΌ, ΡΡΠΎ Π² ΡΠΈΡΡΠ΅ΠΌΠ΅ QNX ΡΠΈΠ³Π½Π°Π» ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΡΡΠ»Π°ΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΡΠ°Π±ΠΎΡΠ°ΡΡΠ΅ΠΌΡ Π½Π° Π»ΡΠ±ΠΎΠΌ ΡΠ·Π»Π΅ ΡΠ΅ΡΠΈ QNET. Π ΡΡΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΏΡΠΎΠΌΠ΅Π»ΡΠΊΠ½ΡΠ²ΡΠ΅Π΅ Π²ΡΡΠ΅ Π·Π°ΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ ΠΈΠ· ΡΠ΅Ρ Π½ΠΈΡΠ΅ΡΠΊΠΎΠΉ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, ΡΡΠΎ ΡΠΈΠ³Π½Π°Π» Π² QNX - ΡΡΠΎ ΠΏΡΠ»ΡΡ, ΡΠΎ Π΅ΡΡΡ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π²ΠΈΠ΄ΠΎΠ² ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΌΠΈΠΊΡΠΎΡΠ΄ΡΠ°.
Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, ΡΠΈΡΡΠ΅ΠΌΠ½Π°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° QNX kill (ΠΈΠΌΠ΅Π½Π½ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½Π°Ρ β /bin/kill, Π² ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΠΎΠΉ ΡΠΎΡΠΌΡ kill ΠΊΠΎΠΌΠ°Π½Π΄Π½ΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΡΡΡΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΡΡΡ ΡΡΠ°Π΄ΠΈΡΠΈΡΠΌ UNIX, ΠΊΠ°ΠΊ ΠΈ ΠΏΡΠ΅Π΄ΡΠΏΡΠ΅ΠΆΠ΄Π°Π΅Ρ Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ Π½Π°ΠΌΠΈ ΡΡΡΠΎΠΊΠ°) ΠΈΠΌΠ΅Π΅Ρ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΡΡΠ»Π°ΡΡ ΡΠΈΠ³Π½Π°Π»Ρ Π»ΡΠ±ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ Π² ΡΠ΅ΡΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΏΡΠΎΡΠΎΡΠΈΠΏΠΎΠ² Π²ΡΠ·ΠΎΠ²ΠΎΠ² kill() ΠΈ sigqueue() ΠΌΡ Π½Π΅ Π½Π°Ρ ΠΎΠ΄ΠΈΠΌ ΠΈ ΡΠ»Π΅Π΄Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΠ΅Π³ΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ ΡΠ΄Π°Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. Π’ΠΎΠ³Π΄Π° ΠΊΠ°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° kill? Π‘ΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π²Π΅ΡΠ½ΠΎ: ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Π²ΡΠ·ΠΎΠ² native QNX API, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΡΠ°ΠΊ (ΡΡΠΎΡ Π²ΡΠ·ΠΎΠ², ΠΊΠ°ΠΊ ΠΈ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π΄ΡΡΠ³ΠΈΠ΅, ΠΈΠΌΠ΅Π΅Ρ Π΄Π²Π΅ ΡΠΎΡΠΌΡ, Π²ΡΠΎΡΠ°Ρ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π»ΡΠ΅ΡΡΡ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π² ΠΌΠ½ΠΎΠ³ΠΎ- ΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅):
#include <sys/neutrino.h>
int SignalKill(uint32_t nd, pid_t pid,
int tid, int signo, int code, int value);
int SignalKill_r(uint32_t nd, pid_t pid, int tid, int signo,
int code int value);
Π³Π΄Π΅ nd β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° QNET, Π½Π° ΠΊΠΎΡΠΎΡΠΎΠΌ Π±ΡΠ΄ΡΡ ΡΠ°Π·ΡΡΠΊΠΈΠ²Π°ΡΡΡΡ pid ΠΈ tid. ΠΠ»Ρ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π° Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌΡ ΠΏΡΠΎΡΠ΅ΡΡΡ (ΠΏΠΎΡΠΎΠΊΡ) ΠΌΠΎΠΆΠ½ΠΎ Π΄Π»Ρ nd ΡΠΊΠ°Π·Π°ΡΡ 0, Π½ΠΎ Π»ΡΡΡΠ΅ β ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΡ ND_LOCAL_NODE.
ΠΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ·Π»Π° Π² ΡΠ΅ΡΠΈ QNET β ΠΏΠΎΠ½ΡΡΠΈΠ΅ ΠΎΡΠ½ΠΎΡΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅; ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΠ»ΡΡΠ΅Π½, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π²ΡΠ·ΠΎΠ²ΠΎΠΌ netmgr_strtond(). ΠΠΎ ΠΈ Π·Π΄Π΅ΡΡ Π½Π΅ Π²ΡΠ΅ ΡΠ°ΠΊ ΠΏΡΠΎΡΡΠΎ:
β’ ΠΠ΅ΡΠΊΡΠΈΠΏΡΠΎΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ, ΡΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ·Π»Ρ Β«hostΒ», ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π½Π° ΡΠ·Π»Π΅ Β«ΠΒ», ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ N, Π½ΠΎ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠΎΠ³ΠΎ ΠΆΠ΅ ΡΠ·Π»Π°, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠΉ Π½Π° ΡΠ·Π»Π΅ Β«ΠΒ», Π±ΡΠ΄Π΅Ρ ΠΈΠΌΠ΅ΡΡ ΡΠΆΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ M, ΡΠΎ Π΅ΡΡΡ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ·Π»Π° β ΡΡΠΎ Β«Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° X, ΠΊΠ°ΠΊ ΠΎΠ½ Π²ΠΈΠ΄ΠΈΡΡΡ Ρ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΡΠ·Π»Π° YΒ».
β’ Π’ΠΎΡ ΠΆΠ΅ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡ ΡΠ·Π»Π° Β«hostΒ» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡΡΠΈΠΉ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ N, Π½ΠΎ ΡΠΆΠ΅ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Β«ΡΠΌΠ΅Π½ΠΈΡΡΒ» ΡΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ Π½Π° M, ΡΠΎ Π΅ΡΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ netmgr_strtond(), Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ...
ΠΡΠΈ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΡΡΠΈ ΠΎΡΠ½ΠΎΡΡΡΡΡ ΠΊ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ QNET ΠΈ ΡΡΠ΅Π±ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠΆΠ΄Π΅Π½ΠΈΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π½Π΅ ΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΎΠΌ Π½Π°ΡΠ΅Π³ΠΎ ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΡ.
pid β PID ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°Π», pid ΠΌΠΎΠΆΠ΅Ρ ΠΈΠΌΠ΅ΡΡ ΠΈ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΏΠΎΠ»ΠΎΠΆΠΈΡΠ΅Π»ΡΠ½ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ (-pid) ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΡΠΈΡΡΠ΅Ρ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² EGID, ΠΈ ΡΠΈΠ³Π½Π°Π» Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π²ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ Π³ΡΡΠΏΠΏΡ. ΠΡΠΈ Π½ΡΠ»Π΅Π²ΠΎΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠΈ pid ΡΠΈΠ³Π½Π°Π» Π±ΡΠ΄Π΅Ρ ΠΎΡΠΏΡΠ°Π²Π»Π΅Π½ Π²ΡΠ΅ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ Π³ΡΡΠΏΠΏΡ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Ρ.
tid β 0 ΠΈΠ»ΠΈ TID ΠΏΠΎΡΠΎΠΊΠ°, ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π½Π°ΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ ΡΠΈΠ³Π½Π°Π». ΠΡΠΈ ΡΠΊΠ°Π·Π°Π½ΠΈΠΈ tid ΡΠΈΠ³Π½Π°Π» Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΠ°Π²Π»ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ, Π° ΠΏΡΠΈ tid = 0 β Π²ΡΠ΅ΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°. ΠΠ°Π»ΡΠ½Π΅ΠΉΡΠ°Ρ ΡΡΠ΄ΡΠ±Π° ΡΠΈΠ³Π½Π°Π»Π° Π² ΠΎΠ±ΠΎΠΈΡ ΡΠ»ΡΡΠ°ΡΡ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΠ³Π½Π°Π»Π° Π² ΠΏΠΎΡΠΎΠΊΠ΅, ΠΊΠ°ΠΊ ΠΌΡ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈ ΡΠ°Π½Π΅Π΅.
signo β Π½ΠΎΠΌΠ΅Ρ ΡΠΈΠ³Π½Π°Π»Π° (Ρ Π½ΠΈΠΌ Π½Π΅ΠΎΠ΄Π½ΠΎΠΊΡΠ°ΡΠ½ΠΎ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈΡΡ Π²ΡΡΠ΅).
code ΠΈ value β ΠΊΠΎΠ΄ ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅, Π°ΡΡΠΎΡΠΈΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ Ρ ΡΠΈΠ³Π½Π°Π»ΠΎΠΌ (ΠΈΡ ΠΌΡ ΡΠΎΠΆΠ΅ Π²ΡΡΡΠ΅ΡΠ°Π»ΠΈ ΠΏΡΠΈ ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»ΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ).
ΠΠ°ΠΊ ΠΈ ΠΎΠ±ΡΡΠ½ΠΎ, Π²Π½Π΅ΡΠ½Π΅Π΅ ΡΠ°Π·Π»ΠΈΡΠΈΠ΅ (Π΄Π»Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°) ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠΎΡΠΌΡ SignalKill() ΠΈ ΡΠΎΡΠΌΡ, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠΉ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ ΡΡΠ΅Π΄Π΅, SignalKill_r() ΡΠΎΡΡΠΎΠΈΡ Π² ΡΠΎΠΌ, ΡΡΠΎ:
β’ SignalKill() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ -1 Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ, Π° ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ Π·Π°Π½ΠΎΡΠΈΡΡΡ Π² errno; Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°ΡΠΎΡΠΎΠΌ ΡΡΠΏΠ΅ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ;
β’ SignalKill_r() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ EOK Π² ΡΠ»ΡΡΠ°Π΅ ΡΡΠΏΠ΅Ρ Π°, Π° Π² ΡΠ»ΡΡΠ°Π΅ ΠΎΡΠΈΠ±ΠΊΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΎΡΡΠΈΡΠ°ΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ΄ ΠΎΡΠΈΠ±ΠΊΠΈ (ΡΠΎΡ ΠΆΠ΅, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠΎΡΠΌΠ° Π·Π°Π½ΠΎΡΠΈΡ Π² errno, Π½ΠΎ ΡΠΎ Π·Π½Π°ΠΊΠΎΠΌ ΠΌΠΈΠ½ΡΡ).
ΠΠΎΠ·ΠΌΠΎΠΆΠ½Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΊΠΎΠ΄Ρ ΠΎΡΠΈΠ±ΠΎΠΊ, Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΠΌΡΠ΅ ΡΡΠΈΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ:
EINVAL β Π½Π΅Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎΠ΅ ΡΠΈΡΠ»ΠΎΠ²ΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ signo;
ESRCH β Π½Π΅ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΉ Π°Π΄ΡΠ΅ΡΠ°Ρ (pid ΠΈΠ»ΠΈ tid);
EPERM β ΠΏΡΠΎΡΠ΅ΡΡ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΡΡ ΠΏΡΠ°Π² Π΄Π»Ρ ΠΏΠΎΡΡΠ»ΠΊΠΈ ΡΠΈΠ³Π½Π°Π»Π°;
EAGAIN β Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² ΡΠ΄ΡΠ° Π΄Π»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ, Π²ΠΎΠ·ΡΠΌΠΈΡΠ΅ Π»ΡΠ±ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ²ΡΠΈΡ ΡΡ Π²ΡΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΡΠ°Π·Π½Π΅ΡΠΈΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ΅ΡΠ΅Π²ΡΠΌ ΡΠ·Π»Π°ΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΠ΅ Β«ΡΠ΅Π»Π΅ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅Β» Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅-ΠΎΡΠΏΡΠ°Π²ΠΈΡΠ΅Π»Π΅.
ΠΡΠΎΡΡΠ΅ΠΉΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΠ΅ΠΉ ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅Π°ΠΊΡΠΈΠΈ Π² ΡΠ΅ΡΠΈ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠ°Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
β’ ΠΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΠΌ Π·Π°ΠΏΡΡΠΊ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΡΠ΄Π°Π»Π΅Π½Π½ΠΎΠΌ ΡΠ·Π»Π΅, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
# on -f <host> raqc
β’ ΠΠΎΡΠ»Π΅ ΡΠ΅Π³ΠΎ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² ΡΡΠ΄ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² Π·Π°ΠΏΡΡΠ΅Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅, ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΠΌ Π΅Π΅ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎ [Ctrl+C] Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠΌΠΈΠ½Π°Π»Π°.
ΠΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ ΠΎΡΠ΅Π½ΠΈΡΡ Π΄Π°Π»Π΅ΠΊΠΎ ΠΈΠ΄ΡΡΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΡΡΠΎΠ³ΠΎ Β«ΠΌΠ°Π»Π΅Π½ΡΠΊΠΎΠ³ΠΎΒ» ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ POSIX-ΡΡ Π΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ Ρ ΡΠΈΠ³Π½Π°Π»Π°ΠΌΠΈ:
β’ ΠΠ° ΡΠ΅Ρ Π½ΠΈΠΊΠ΅ Β«ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²Β» ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΏΠΎΡΡΡΠΎΠ΅Π½Π° ΡΠ΅Π»Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉ ΡΠ΅ΡΠ΅Π²ΡΡ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π΅Π΄ΠΈΠ½ΠΎΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠΉ ΠΏΡΠΈΠΊΠ»Π°Π΄Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ.
β’ ΠΠΌΠ΅Π½Π½ΠΎ Β«ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½ΠΈΠΉΒ» (Π½ΠΎ Π½Π΅ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Ρ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², Π²Π»ΠΈΡΡΡΠ΅ΠΉ Π½Π° ΠΎΠ±ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΈΠ·Π°ΡΠΈΠΈ ΡΠΎΡΡΠ°Π²Π»ΡΡΡΠΈΡ ΡΠ°ΡΡΠ΅ΠΉ ΠΈ Ρ.ΠΏ.): ΠΏΠΎΡΡΠ»ΠΊΠ° ΡΠΈΠ³Π½Π°Π»Π° ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅ΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠ΅ΠΉ (Π½Π΅ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΎΡΠ²Π΅ΡΠ°), Π° ΠΏΡΠΈΠ΅ΠΌ ΡΠΈΠ³Π½Π°Π»Π° Π½Π΅ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π°Π΅ΡΡΡ Π½Π°ΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ (ΠΈΠ»ΠΈ Π»ΡΠ±ΡΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ) ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ².
β’ Π’Π°ΠΊΠΎΠ΅ Β«ΡΠΈΠ³Π½Π°Π»ΡΠ½ΠΎΠ΅Β» Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅, Π·Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ΅ Π² ΡΠΎΡΠΌΠ°Π»ΡΠ½ΠΎΠΉ POSIX-ΡΠ΅ΠΌΠ°Π½ΡΠΈΠΊΠ΅ (Π½ΠΎ, ΠΏΠΎ ΡΡΡΠΈ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠ΅Π΅ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΡ, Π΄Π°Π»Π΅ΠΊΠΎ Π²ΡΡ ΠΎΠ΄ΡΡΠΈΠ΅ Π·Π° POSIX), ΠΌΠΎΠΆΠ΅Ρ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ ΠΏΡΠΎΡΠ΅ Π² Π·Π°ΠΏΠΈΡΠΈ ΠΈ ΠΏΠΎΠ½ΠΈΠΌΠ°Π½ΠΈΠΈ, ΡΠ΅ΠΌ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²ΡΡ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΎΠ±ΠΌΠ΅Π½Π° ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡΠΌΠΈ (ΠΏΡΠ»ΡΡΠ°ΠΌΠΈ).
4. ΠΡΠΈΠΌΠΈΡΠΈΠ²Ρ ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ
ΠΠ‘ QNX Neutrino ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΠΈΡΠΎΠΊΠΈΠΉ Π½Π°Π±ΠΎΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠ°ΠΊ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΡΠ°ΠΊ ΠΈ ΡΠ°Π·Π½ΡΡ . ΠΡΠΎ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΠΏΠΎΠ»Π½ΡΠΉ ΡΠΏΠ΅ΠΊΡΡ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²ΠΎΠ², ΠΎΠΏΠΈΡΡΠ²Π°Π΅ΠΌΡΡ ΠΊΠ°ΠΊ Π±Π°Π·ΠΎΠ²ΡΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠΌ POSIX, ΡΠ°ΠΊ ΠΈ Π²ΡΠ΅ΠΌΠΈ Π΅Π³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ ΡΠ΅Π°Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ ΡΠΎ Π²ΡΠ΅ΠΌΠΈ ΡΡΠΈΠΌΠΈ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π°ΠΌΠΈ Π½Π΅ ΠΏΠΎΠΊΠΈΠ΄Π°Π΅Ρ ΠΎΡΡΡΠ΅Π½ΠΈΠ΅, ΡΡΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· Π½ΠΈΡ ΡΠ²Π»ΡΡΡΡΡ ΠΎΡΠ³Π°Π½ΠΈΡΠ½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ°ΠΌΠΎΠΉ ΠΠ‘ (ΠΌΡΡΡΠ΅ΠΊΡ, ΡΡΠ»ΠΎΠ²Π½Π°Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ), Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ ΠΊΠ°ΠΊ Π΄ΡΡΠ³ΠΈΠ΅ β Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π³ΡΠΎΠΌΠΎΠ·Π΄ΠΊΠ°Ρ Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ° Π½Π°Π΄ Π±Π°Π·ΠΎΠ²ΡΠΌΠΈ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°ΠΌΠΈ, ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅ΠΌΠ°Ρ, Π³Π»Π°Π²Π½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π² ΡΠ³ΠΎΠ΄Ρ POSIX.