Linux операциондық жүйесінде kill функциясын оқып үйрену және оны Си тілінде программалау

Кіріспе ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 4
1 Сигналдар ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...5
1.1 Сигналдарды өңдеу ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .7
1.2 Үрдістер тобы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 14
1.3 Сигналдарды үрдістермен жіберу ... ... ... ... ... ... ... ... ... ... ... ... 14
2 Linux операциялық жүйесінің функциялары ... ... ... ... ... ... ... ... ... ... 16
2.1 wait() функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ..16
2.2 fork() функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 17
2.3 ехес() функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...18
2.4 pipe() функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...19
3 Kill функциясы ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 21
3.1 Сигналды беру үрдісі: kill ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .21
3.2 Туынды үрдістердің “өлімі” ... ... ... ... ... ... ... ... ... ... ... ... ... ... .23
3.3 Үрдістің тоқтатылуы мен жаңаруы ... ... ... ... ... ... ... ... ... ... ... .25
Қорытынды ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... .29
Қолданылған әдебиеттер ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... 30
Қосымша
kill() жүйелік шақыруды қолдана отырып, үрдіс басқа үрдіске сигнал жібере алады. Жүйелік шақыру kill() үшін оның аты оның қызметіне мінезделмейді, себебі оның жібере алатын көптеген сигпалдары үрдісті аяқтамайды (“өлтірмейді”). Шақыру өзінің тарихи себептеріне баіланысты алған: UNIX құрылған кезде сигналдарды қолданудың негізі үрдісті аяқтау болып табылады.
kill командасын әдетте үрдістін орындалуын тоқтату үшін қолданады. Бұл команда үрдіске кез келген сигналды жібере алады, ал егер көрсетілмесе ол TERM программаны аяқтау сигналын жібереді. kill командасын қарапайым пайдаланушылар да (өздерінің жеке үрдістері үшін), привилегиялық пайдаланушылар да (кез келген үрдіс үшін) қолдана алады.
1. Стивенс У. UNIX, взаимодействие процессов. – М.: Питер, 2002
2. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. - СПб.: Питер, 2001
3. Дейтл Г. Введение в операционные системы. В 2-х томах. Пер.с англ. – М.: Мир, 1987
4. Концептуальное моделирование информационных систем. /Под.ред. В.В.Фильчакова. – СПб: СПВУРЭ ПВО, 1998
5. Клочко В.И. Теория вычислительных процессов и структур. Учебное пособие. – Краснодар: Издательство КубГТУ, 1999
6. Кейт Хэвиленд, Дайана Грэй и др. Системное программирование UNIX. – М.: Москва, 2000
7. Операционные системы – от РС до РS/2/ Ж.Фодор, Д.Бонифас, Ж.Танги. Пер. с франц. – М.: Мир, 1992
8. Олифер В.Г., Олифер Н.А. Сетевые ОС.- СПб.: 2002
9. Хелен Кастер. Основы Windows NT и NTFS. Пер.с англ. – М.: Отдел Русская редакция “ТОО-Channel Traiding ltd”, 1996
10. Эви Немет, Гарт Снайдер и др. UNIX. Руководство системного администратора. – Киев, 2000
11. Корнеев В.В. Параллельные вычислительные системы. Москва, 1999
        
        ҚАЗАҚСТАН РЕСПУБЛИКАСЫНЫҢ
БIЛIМ ЖӘНЕ ҒЫЛЫМ МИНИСТРЛIГI
Қаныш Сәтбаев атындағы
ҚАЗАҚ ҰЛТТЫҚ ТЕХНИКАЛЫҚ УНИВЕРСИТЕТI
Ақпараттық технoлогиялар институты
Есептеу техникасы кафедрасы
КУРСТЫҚ ЖҰМЫСҚА ... Linux ... ... kill ... оқып ... және ... тілінде программалау
Жетекшiсi: аға оқытушы
Сейілова Н.А.. аты-жөнi
Бақылаушы: аға ... Н.А. ... ... 2005 ... Мутанова С.А.
Мамандығы: 050704
Тобы: ВПбП-04-8Қ
Алматы 2005
Курстық жұмысты орындауға тапсырма
Студент: ... ... Linux ... ... kill ... оқып ... оны Си ... программалау
Аяқталған жұмысты тапсыру уақыты
“__“ _________ 2005.
Жұмыс барысында қолданылатын бастапқы мәлiметтер
(мазмұны, ... ... ... бөлiм, қорытынды)
Сызба материалдар саны:
Жұмыс жетекшiсi: Сейілова Н.А.
Тапсырманы орындауға қабылдап алған ... ... ... ... ... ... ... Сигналдарды үрдістермен
жіберу................................................14
2 Linux операциялық жүйесінің
функциялары........................................16
2.1 wait()
функциясы...................................................................
.......16
2.2 fork()
функциясы...................................................................
.........17
2.3 ... ... ... ... беру ... Туынды үрдістердің
“өлімі”.........................................................23
3.3 Үрдістің тоқтатылуы мен
жаңаруы.............................................25
Қорытынды
............................................................................
.....................29
Қолданылған
әдебиеттер..................................................................
..........30
Қосымша
Кіріспе
kill() жүйелік шақыруды қолдана отырып, үрдіс басқа үрдіске ... ... ... ... kill() үшін оның аты оның ... ... оның ... алатын көптеген сигпалдары ... ... ... ... ... ... баіланысты
алған: UNIX құрылған кезде сигналдарды қолданудың негізі үрдісті ... ... ... әдетте үрдістін орындалуын тоқтату үшін қолданады. Бұл
команда үрдіске кез келген сигналды жібере алады, ал егер көрсетілмесе ол
TERM ... ... ... ... kill ... ... да (өздерінің жеке үрдістері ... ... да (кез ... үрдіс үшін) қолдана алады.
1 Сигналдар
Сигналдар үрдістерге асинхронды жағдайлардың пайда болған ... ... ... ... үрдістермен жүргізіледі, ол kill
функциясы көмегімен немесе ядромен жүреді. Unix ... 5-ші ... 19 ... ... бар, ... ... классифицировать етуге
болады:
• Үрдістің орындалуын аяқтау кезінде жіберілетін ... ... ... exit ... signal ... death of ... өлуі) параметрімен бірге орындалады;
• Үрдістің ерекше жағдайды шақыруды пайда болған жағдайда жіберілетін
сигналдар, ... ... ... ... ... тыс орналасқан
мекенге жолығу немесе жады аймағында оқу үшін ғана ... ... ... ... ... ... ... командаларды
орындауды, сонымен қатар әртүрлі аппараттық қателердің орындалуын
көру;
• Түзетілмейтін қателердің пайда ... ... ... ... жіберілетін сигналдар, оларға шығатын мекендік
аймақтың босауынан кейін, exec ... ... ... ... жою ... ... ... мүлдем күтпеген қателердің орындалу уақытында пайда
болғанына қызмет ететін себептері бола алатын сиг-налдар, оларға жоқ
жүйелік функцияларға қатынасу ... ... ... ... ... біреуінде жоқ нөміріне беру), ешбір оқылу ... ... ... ... ... Iseek ... ... параметрінде болмайтын мәнді қолдану жатады. Қайткенде де,
бұндай жағдайда логикалық тұрғыдан қарағанда сигналды жібергеннің
орнына ... ... ... жөн ... еді, бірақ практикалық
тұрғыдан қарағанда ... ... ... ... ... ... аяқтауда сигналдардың (*) қолданғаны дұрысырақ болады;
• Есептеу ... ... ... жіберілетін сигнал-дар, мысалы,
белгілі бір уақыт периоды өткенде ... ... ... ... kill ... ... үрдістер өзара ауыстыратын
ерікті сигналдар;
• Терминалдар әрекеттесуімен ... ... ... ... ... (кез ... себепке байланысты терминалдың сызығында
толушы-сигнал аяқталған кезде) немесе терминалдың пернетақтасында
“break” және “delete” түймешіктерінің басылуымен;
• Олардың ... ... ... із салуы болатын сиг-налдар. Осы
бөлімде әр топтардағы сигналдардың ... ... ... ... ... үрдіске жіберетіні, қалай үрдіс сигналдарды
өңдейді және оларды реакциясын басқаратындығы сияқты концепция ... ... ... ... ... ... отырып, ядро сигналдар
типіне сәйкес келетін үрдістер ... ... ... сигналдар
кеңістігіне жазуды орналастырады. Егер ... ... ... ... ... ... ядро оның орындалуын жаңартады. Бұдан
сигналдың жіберу рөлі (үрдіс немесе ... ... ... ... ... еске ... ... бірақ қабылдайтын әр типтің ... еске ... ... ... егер үрдіс “тоқтап қалу” немесе жүйеден
үрдістің жойылғаны туралы сигнал алса, ол ... ... ... ... сәйкес разрядты орнатады, бірақ ол сигналдың әр ... ... ... айта алмайды.
Ядро, үрдіс ядро режимінен есептеуші режиміне өтейін деген ... ... ... ... ... ол ... ... өтеді немесе
күйден жеткілікті төмен жоспарлау артықшылығымен шығады. Ядро сигнал-ды
үрдіс ядро режимінен ... ... ... жағдайда ғана өңдейді.
Сондықтан сигнал ядро ... ... ... ... ... етпейді. Егер үрдіс есептеу режимінде орындалса, ядро ол уақытта
үрдісіне сигналды жіберуге әсер ... ... ... ядро үзуден шығуда
сигналды танып және өңдейді. Сол себептен, үрдіс есептеу ... ... ... ... ... ұсынылған алгоритм көмегімен ядро ... ... ... ... ... Егер үрдіс signal функция-сын
қолданатын болса, онда біз оның ... ... ... Issig ... ядро үрдіс мән бергісі келмейтін сигналдар-дың
идентификациясын өлтіреді және басқа қалған ... ... ... ... ... ... тексеру*/
кіретін ақпарат: жоқ
шығатын ақпарат: егер үрдіс оған қызығушылығы бар ... ... ... ... бер (сигналды қабылдау туралы индикациясы бар үрдістер
кесте жазуындағы өрісте нөлдік ... ... ... ... ... ... ... типі «ұрпақтың өлуі»)
{
Егер (берілген типтің сигналы жақтыртпаса) өмір сүруі
тоқтатылған ұрпаққа сәйкес үрдістер ... ... ... егер (берілген типтегі сигналдар
қабылданса)
(ақиқатты) қайтару;
}
кері ... егер ... ... ... ... ... сақтайтын үрдістер кестесі
сәйкес үрдісте орнатылған сигналдық разрядты тастау (өшіру);
}
(жалғанды) қайтару;
}
1-сурет. Сигналдарды тану алгоритмі.
1.1 Сигналдарды өңдеу
Ядро үрдістің контекстінде оны ... ... ... Сол
себептен сигнал өңдеу үшін үрдісті іске қосу қажет. Сигнал ... 3 ... ... ... ... кейін аяқталады және сигналға мән
бермейді немесе оны ... ... ... ... ... ... қолданылатын үрдіс жағынан келісімді реакция exit функциясын
шақыру болып табылады, дегнімен де signal ... ... ... ... сигналдарды үндемелі қабылдайтын басқа арнайы іс-әрекеттер-ді
бағыттай алады.
signal функциясының жүйелік шақыру синтаксисі:
oldfunction = signal(signum, function);
мұнда, signum – ... ... ол ... кезде пайдаланушы функция-сы
іске қосумен байланысты іс-әрекет орындалады, function – ... ...... мәнін қайтару. Үрдіс функция ... ... signal ... 1 және 0 ... бере алады: егер
function=1 болса, үрдіс signum ... ... ... сигналдарды жақтыр-
майды (жақтырмайтын сигналдарға байланысты ерекше жағдай ол «ұрпақ-тардың
өлуі»), егер 0-ге тең болса (келісулі мән ... ... ... ... ... ... ... өңдеу үшін үрдіс аума-ғында
массив кеңістігі ... ... әр ... ... сигналға бір
кеңістіктен нөмірі көрсетілген сәйкес сигналдың кеңістігінде ядро пайдала-
нушы функция ... ... ... шақырылатын шешімін сақтайды.
Бір типті сигналдың ... ... ... ... ... ... ... агоритмі /*оның бар болғанын тексергеннен кейін сигналды
өңдеу*/
кіретін ақпарат: ... ... ... ... жазуынан сигнал нөмірін таңдау;
сигнал нөмірімен өрісті тазарту;
егер (signal функциясын алдын ала шақырды, ... ... ... ... ... ... ... қайтару;
егер (сигналды алғаннан кейін орындау керек функцияны
пайдаланушы көрсетеді)
{
үрдіс кеңістігінен сигналды өңдеу ... ... ... ... ... ... ... емес жанама әсер болады */
сигналды өңдеу функциясының мекені ... ... ... тазарту;
пайдаланушы контекстіне өзгерту енгізу:
сигналды өңдеу функциясына еліктеуді үндейтін ... ... ... ... ... ... енгізу:
команда счетчигінің өрісінде сигналды өңдеу функциясының
мекенін жазу, ол сақталған контекстік есебіне ... ... ... ... үрдістің пішінін дампирлеуді талап етсе)
{
ағымдағы каталогта “corn” атымен жайл құру;
“corn” файылына пайдаланушы контекстінің мазмұнын ... ... тез ... жүктеу;
}
2-сурет. Сигналды өңдеу алгоритмі.
Сигналды өңдей тұра (2-сурет), ядро ... ... ... ... ... ... ... (өшіреді), ол берілген
сигнал типі бойынша сәйкес келеді және сигналды үрдіспен қабылдау ... Егер ... ... ... келісілген мәнді өзіне алса,
ядро басқа жағдайда үрдісті аяқтау алдында жадыдағы үрдіс күйіне ... ... ... Дампирлау программистер үшін тиімді,
себебі ол жадыдағы сигналдың түсуін анықтайды және ... ... тыс ... ... Ядро ... ... ... жіберетін сигналдардың түскенде, жадының жағдайын дампирлайды,
оларға мысал ретінде тиым ... ... ... ... ... ... кеңістігінен тыс орналас-қан мекенге жолығу. Егер сигнал
программалық қатемен қатнаспаса, ядро жады ... ... ... ... ... ... түймешігін басумен шақырған ... ... ... уақытынан бұрын аяқтағысы ... ... ... ... бұл ... «тоқтап қалу» сигналы регистрациялы
терминалмен бірге бүлінуі туралы куәлік бола алады. Бұл сигналдар үрдістің
ағынының қатесі-мен ... ... Шығу ... сигнал (quit),
дегенімен де үрдістің орындалуынан тыс болатынына қарамастан жады ... ... Бұл ... ... ... ... ... егер үрдіс бір камандалардың ... ... ... ... ... прогаммистке үрдісті іске қосқан уақытынан кейін кез
келген сәтте жады жағдайынан дамп ... ... ... үрдіс алдында мән бермейміз деп келіскен сигналды алса, үрдіс ол
сигналды болмады деп орындалуын ... Ядро ... ... ... ... жақтырмауды керек екенді ... ... ... ... ... кезде үрдіс оған тағы да ... Егер ... әсер ету ... ... ... алатын болса,
есептеуші режимінде үрдісті қайтарғаннан кейін алдын ала шартталған ... ... ... де ... ... ... ауыстыру
алдында, ядро келесі қадамдарды қабылдау керек:
1. ядро сақталған егистрлік есепке жолығып, стек төбесінің көрсеткішін
және ... ... ... ... ... ... сигналды өңдеу функциясы кеңістігіне алдынғы мәнді үрдіс кеңістігіне
тастайды және келісім бойынша оған мән ... ... сай ... жады бөлінетін есептеу стегіне жаңа жазу
шығарады, алдында таңдалған сақтаулы есептеу ... ... ... ... және ... ... ... жазады.
Есептеуіш стегі үрдіс пайдаланушы функциясын (сигналды ... ... ... ... ... ядро оның ... ... танымай тұрып) жеріндегі нүктеден қараған сияқты көрінеді.
4. сақталған регистрлік есеп контекстке өзгерту ... ... ... ... тең счетчик командасының мәнін орнатады, ол стек
төбесінің көрсеткішінің мәнің есептеу стегінің түбіне ... ... ... ... ядро режимінен есептеу режиміне үрдіс
сигналды өңдеу функциясын орындалуына кіріседі; оны ... соң ... ... ... ... жолыққан немесе үзу болған
жерге беріледі, сонымен ... ... ... үзуден шығуды еліктетеді.
Мысал ретінде 3-суретті алуға болады, ол үзу туралы сигналды (SIGINT)
қабылдайды және өзі де ... ... (kill ... ... ... VAX 11/780 ... жүйедегі жүктеуші
дисассемблированияның қорытындысын алғандағы программалық кодтың ... ... ... kill библиотекалық процедурасында
жолыққан ее (он алтылық) мекені болады; бұл ... kill ... ... бұрын 10а мекені бойынша chmk командасын орындайды
(үдісті ядро режиміне ауыстыру). 10с – ... ... ... ... функция орындалу кезінде ядро үрдіс-ке үзу туралы ... ... бұл ... үрдіс есептеуіш режиміне қайтайын деп жатқанда мән
береді, 10с мекенді қайтаруы сақталған регистр-лік ... ... ... ... ... ... қоса 104 сигналды өңдеу ... ядро ... ... ... ... орналстырады.
Қаралған сигналдарды өңдеу алгоритмінде бірнеше сәйкссіздіктер бар.
Олардың ең ... және ... ... ... ... ... ... бұрын тазалаумен байланысты, оның өзінде ... ... ... ... бар. Егер ... тағы да сигналды өңдеу керек
болса, ол тағы да signal жүйесін функциясына көмекке ... тура ... болу ... емес ... ... ... ... жағдай
тууы мүмкін, егер екінші рет үрдіс жүйелік функцияны іске ... ... ... сигнал түссе. Үрдіс есептеу режимінде ... ... ... тура ... ... сонымен үрдістің сигналды
өңдеу функция өріске мәндерді тастау ... ... ... ... ... ... ... Сигналды қабылдау программасының мәтіні
**** VAX DISASSEMBLER ****
_main()
e4:
e6: pushab ... pushl ... ... жол signal ... шақырады
ee: calls ... pushl ... clrl ... келесі жол библиотекалық kill процедурасын шақырады
f9: calls $Ox2,Ox8(pc)
100: ret
101: ... ... ... ... ... ... ... операциялық жүйенің ішкі үзуі шақырылады
10a: chmk ... bgequ Ox6 ... jmp ... clrl ... ... ... ... программасының дисассемблерлік қорытындысы.
Бұл жағдайды 5 – суретте көрсетілген программа мысалында ... ... signal ... ... үзіліс туралы сигналды қабылдауға
және оны қабылдағаннан кейін sigcatcher функциясын орындауға ... ... ... Одан кейін ол жаңа үрдісті туғызады, ол ата-ана үрдісінің
іске қосылу приоритетін оның ұрпағының приоритетінен ... ... nice ... ... іске ... және ... циклге кіреді.
Пайда болған үрдіс өзінің орындалуын ата-аналық үрдіске nice ... ... ... беру үшін және ... ... ... үшін
5 секундқа кідіреді. Бұдан кейін пайда болған үрдіс әрбір итерациясында ол
ата-аналық ... ... ... ... беретін циклге енеді ... ... ... Егер қате болса, мысалы, ата-аналық үрдіс жоққа
айналғанда, kill аяқталады, онда пайда болған үрдіс те ... ... ... болып, ата-аналық әрбәр үзіліс туралы сигнал ... ... ... іске қосу ... ... ... ... хабарлама шығарады
және үзіліс туралы сигнал пайда болғанда signal ... ... ал ... ... ... команда жинауын жалғастыра береді.
Алайда, оқиғаның болу кезегі келесідегідей болуы мүмкін:
• Пайда болған үрдіс ата-аналық үрдіске үзіліс туралы сигнал жібереді.
... ... ... ... және сигналды өңдеу функциясын
шақырады, бірақ контекстті ауыстыруды signal ... ... ... ... ... ... резервтеленеді.
• Ата-аналық үрдіске үзіліс туралы тағы бір ... ... ... ... ... іске ... Ата-аналық үрдіс үзіліс туралы екінші сигналды қабылдайды, бірақ бұдан
юұрын ол ... ... ... ... ... ... беріп
үлгермейді. Ата-аналық үрдістің орындалуы қайта қалпына келген соң ол
аяқталады.
#include ... %d ... ... /*PID ... ... (fork() == 0)
{
/* Үрдіске орнатылу үшін уақыт беру */
sleep(5); /* 5 секундқа тоқтату функциясы */
ppid = ... ... ... ... ... ... == -1)
exit();
}
/* приоритеті кіші болған сайн бәсекелестіктің көбею
мүмкіндігі артады * /
nice(10);
for (;;)
;
}
5 – ... ... ... ... ... ... ... бәсеке-
лестіктің пайда болуын көрсететін программа.
Программада үрдістің нақ ... ... ... ... ... үрдістің nice функциясын шақыруынан ядро пайда болған үрдістің
орындалуын іске қосуды жиелетуге ... ... ... (бұл ... ... алынған), сигналдар оқиға ретінде ... ... ... ... да ... әр уақытта өңделе бермейті байқаусыз өтуі ... ... ... ... ... ... ... үрдістердің бәсекелестігі тіркелмеген. Әйтсе де, сигналдарды
қабылдау жүзеге ... ... бұл ... ... ... ... ... егер сигналды сипаттау аймағы ол қабылданған соң ... ед. ... ... ... жаңа ... ... еді: егер
түсетін сигнал қабылданса, ал аймақ тазаланған болса, сигналды ... ... ... ... ... ... мүмкін. Басқа жағынан
алғанда, ядро сигналды өңдеу функциясының мәнін босатуы мүмкін ... ... ... ... ... ... ... не істеу
керектігін көрсеткенші мән ... ... ... ... шешім
ақпаратты жоғалту қаупін тудырады. Өйткені үрдіс қанша сигнал қабылдағанын
білмейтіндей күйде болады. ... бұл ... ... ... бір типтес
сигналдардың үлкен мөлшерін, оларды өңдеу мүмкіндігін алудан ... ... ... көп ... BSD ... ақырында, үрдістің
сигналдарды қабылдауға тиым салуға мүмкіндігі бар және ... ... ... ... тиым салуды алып тастау мүмкіншілігі бар. Үрдіс
сигналдарға тиым салуды алып тастаған кезінде ядро ... ... тиым ... ... бастап қалған сигналдарды жібереді. Үрдіс сигналдарды
қабылдаған ... ядро ... ... ... сигналды өңдеу функциясы
жұмысын тоқтатқанға шейін автоматты түрде тиым ... ... ... әрекетінен ақпараттық үзілістерге әсер ететін ядро ... ... Ол жаңа ... пайда болуына келесілердің
өңделу уақытына ... тиым ... ... ... сәйкессіздігі үрдіс рұқсат етілетін үзіліс
приоритетімен тоқтатылып қойғандағы жүйелік функцияның орындалу уақытында
түсетін сигналдарды қабылдаумен ... ... ... ... (long jump көмегімен), есептеу ритміне көшіреді дәне сигналды
өңдеу функциясын шақырады. Сигналды өңдеу ... ... ... жүйелік функциядан оның орындалуының үзілісі туралы хабарлайтын
қатемен шығады. Қате туралы ... ... ... жүйе ... іске ... ... бұл әрекет BSD жүйесіндегі ... ... ... ... ... ... ... үрдіс түскен сигналға мән бермеген жағдайда пай-да
болажды. Егер сигнал үрдіс рұқсат етілетін үзілістік приоритеті бар ... ... ... ... ... бірақ long jump-ты орындамайды.
Басқаша айтқанда ядро үрдістің түскен ... оның ... ... ғана мән ... ... Үрдісті уақытша тоқтау қалпында қалдырған
жөн болар еді. ... та, ядро ... ... ... ... үрдістің кеңстігіне жіберу мезетінде рұқсаттың болмауы мүмкін.
Бұл мәселе сигналды өңдеу функциясының адресін үрдіс ... жазу ... ... шешілуі мүмкін. Басқа жағынан, үрдіс лезде ... ... ... ... (sleep алгоритмі арқылы), егер ол оның жағалануының
қажеттілігі болмағанын ... ... ... ... өзінің жаңаруын
түсіну мүмкіндігі жоқ, себебі ядро жалғастыру шартымен циклдің ішіндегі
sleep алгоритмінің ... ... ... ... тарау), егер
үрдістің күткен оқиғасы шын мәнінде ... ... ... ... тоқтату күйіне келтіреді.
Жоғарыда айтылғанның бәріне қоса, ядроның «ұрпақтың ... ... ... сигналдар секілді өңделмейтінін айта кеткен жөн. Дербес
жағдайда, үрдіс «ұрпақтың жойылуы» ... ... ... білгенде ол
сигналдың сәйкес үрдіс кестесінің жазу аймағындағы индекациясын өшіреді
және ... ... ... ... ... түспегендей әсер етеді.
«Ұрпақтың жойылуы» сигналды тағайындау үрдісті жаңартудан, мүмкін болатын
приориттеті тоқтатудан тұрады. Егер ... осы ... ... ... ... жағдайда сигналды өңдеу функция-сына жібереді. Бұл жағдайда
мұндай ... ... ... ... үрдіс оны ескермейді. Соңында егер үрдіс
«ұрпақтың жойылуы» (death of child) пара-метрлі сигнал (signal) функциясын
шақырса, онда егер ол ... ... ... ядро оған ... ... ... ... жүйесіде үрдістер PID кодымен идентификацияланбағанымен, кейде
жүйе «топтар» ... ... ... үшін ... ... ... shell’a тіркеуші түрінде ортақ тегі бар үрдістер ... ... ... ... да ... ... не ... басса, терминалды түзу «кідіріп ... ... осы ... ... ... Анық (айқын) оқиғалар түскен кезде жалпы сигналды
алатын бір-бірімен байланысты үрдістердің топтарын ... ... ... ... ... қолданады. Топтардың коды үрдістер ... бір ... ... ... ... ... ... Үрдістер
тобының кодына бастапқы мәнді беру үшін, оның ... ... ... setpgrp ... ... ... Шақыру
функциясының сиснтаксисі:
|grp = setpgrp(); ... grp – ... ... жаңа ... Үрдіс ұрпағы fork функциясын
орындаған кезде ол өз ... ... ... ... ... ... ... ерекшеліктері бар үрдісті орындау үшін қолданған setpgrp
функциясына көңіл ... ... ... ... ... ... үшін үрдістер kill жүйелік функциясын пайдала-нады.
Шақыру функциясының синтаксисі:
kill(pid, signum) .
Мұндағы, жіберілетін ... ... ... ... ... – де ... ... нөмірі көрсетіледі. Pid мәнімен және
орындалатын үрдістердің жиынының арасындағы байланыс келесідей:
|kill(pid,signum) ... де pid (pid>0) оң ... сан ... ядро ... pid идентифика-
торлы сигналды жібереді.
Егер pid (pid=0) тең 0 онда kill ... ... ... бір
топқа кіретін үрдістің барлығына да сигнал жіберіледі.
Егер pid (pid=1) тең 1, онда kill функциясын шақырған кезедегі ... ... ... коды ... ... барлық үрдістерге
жіберіледі. Өте күшті тұтынушының идентификация кодымен орныдалатын ... ... ... идентификаторлы үрдістерден басқа ... pid 0) { return npid; ... if (npid == 0) ... (args[0], args);
return -1;
} else { abort (); }
}
int main (void)
{
char str [MAX_LENGTH];
char* buf[MAX_ARGS];
int i, j, ... (i = 0; i < ... i++) { buf[i] = (char*) ... ... ("mysh# ... (fgets (str, MAX_LENGTH, stdin))
{
str[strlen(str)-1] = '\0';
char* p = (char*) malloc ... = strtok (str, " ... (!strcmp (p, "exit")) { exit (0); ... (i = 0; i < ... ... buf[i] = (char*) malloc ... }
for (i = 0; p != NULL; i++) ... (buf[i], ... = strtok (NULL, " ... = NULL;
status = run_p (buf);
if (status < 0)
{ fprintf (stderr, "mysh: %s: command not found\n",
buf[0]);
exit (1); }
wait (&status);
free (p);
for (i = 0; i < ... i++) { free ... ... ("mysh# ... (0);
}
2.2 fork() функциясы
fork() жүйелік шақыруы (ағылшынша развилка, перепутье) ... ... жаңа ... ... Жаңа үрдіс аталықтың fork() функциясы 0
мәнді туынды орындау тізбегін қайтарып, аталық тізбекке процессор құрған
идентификатордықайтарады. Бұл ... пен ... ... деректердің
бастапқыайырмашлығы болып табылады.
Демек, орындау тізбегі fork() функциясын шақыру жерінен ... және ... ... fork() ... ... ... ... көшеді. Бұл теңестіру инструкциясы кері қайтарыл-ған нөл
мәні болып табылады.
Аталық үрдісте кері қайтарылған мән нөлге тең ... ал ... ... тең. Осы ... орай біз, әр ... өз жолымен жібереміз.
Программаны тоқтатпай тұрып, басқа терминалды жүктеп, ол жерден ps –
ef командасын шақырып ... ... ... ... ... үрдістер
тізімі шығады. Және олардан программадағы fork екі үрдіске де ... ... ... оның бірі ... аталық болып келеді.
# include
Int fdrd, fdwt;
Char c;
Main (argc, argv)
Int argc;
Char*argv [];
{
If (argc! = ... ... ((fdrd = open (argv [1], ... == -1)
Exit (1);
If ((fdwt = creat (argv [2], 0666)) == -1)
Exit ... ... ... ... ... ... (read (fdrd, &c, 1)! = ... (fdwt, &c, 1);
}
}
2.3 ехес() функциясы
Бұл үрдіс өзінің бұрынғы кодын ауыстыра алады. Мұндағы мәліметтер-ді
ехес тобындағы орындаушы ... ... ... асырады. Үрдіс ехес-ті
орындағанда, оның PІD және PPІD ... сол ... ... да тек кодтары
ғана өзгереді. Төменде беріліп ... ехес ... ... ... шақырулар болып табылмайды. Олар ехесve() жүйесін шақырушы С
кітапханасының функциялары ... ... ... ... қолданылатын
өзіндік опциялары болғандықтан көп қолданысқа түспейді.
Синтаксис:
int excecl (const char* path, const char* arg0,
const char* arg1, …, const char* argn, ... execv (const char* path, const char* argv[ ... execlp (const char* path, const char* ... char* arg1, …, const char* argn, NULL)
int execvp (const char* path, const char* argv[ ... ... ... ... ... үрдістің кодын,
path-да жолының аты сақталған ... ... ... ... –ке қарағанда идентті, ал ехесv () ехесvp()-ге
қарағанда ... Бұл ... ... және ... () ... ... ... сәйкестендірілген жолдың атын сұрайды. ... ... ... табу үшін $ PATH ... қолданады.
Егер орындаушы файл табылмаса, жүйелік шақыру 1-ді ... ... ... ... ... өз кодын, орындалушы файлдағы мәліметтер
мен стекты өзгертеді және жаңа код жұмыс ... ... ... ... ... ехес () ... ... еш уақыт кері қайта-рылмайды.
Ехесl() және ехесlp() arge,…,argn деп көрсетілген бір жолдық аргу-
ментті орындалушы файлдарды ... Arg0 ... ... файлдың
атын ұстап тұруы тиіс, ал аргумент тізімі NULL ... ... ... және ... arqv ... [n], arqv [n+1] болып
көрсетілген бір жолдық аргументті орындалушы файлдарды шақырса, онда ... ... ... ... ... ... құлақтандыру
шығарады, одан соң өз кодын орындалушы ... ... ... ... cat myexec.c … ... ... include ... ... process %d and I’m about to exec an ls – l\n”, ... ... “-l”, NULL); /*ls ... (“This line should never be executed \ ... myexec … ... ... process 13623 and I’m about to exec an ls ... 125
-rw-r- -r- - 1 glass 27 Feb 15 00:47 ... 1 glass 24576 Feb 15 00:48 ... ... ... ... ... аяқтағандықтан еш нәрсе ... ... ... pipe() функциясы
Атаусыз канал (unnamed pipe) – бұл автоматты түрде өз кірісін буфер-
лейтін (макси-малды ... ... ... ... ... бірақ
жобалап 5 Кбайт-қа тең) және pipe() жүйелік шақыру арқылы жасалатын бір
бағытты ... ... ... әр ... ... ... бар. ... “жазылатын” соңы write() жүйелік
шақыруы арқылы жазылып алынуы мүмкін, ал “оқылатын” соңы read() ... ... ... ... Үрдіс файлдың каналдық деск-рипторымен
жұмысын аяқтаған кезде, close() жүйелік шақыруын қолдану арқылы оны ... ... int pipe (int ... ... шақыруы атаусыз каналды жасайды және файлдың екі
дескрипто-рын қайтарады; ... ... ... ... дескрип-тор
fd[0]-да сақтала-ды, ол “жазылатын” канал соңымен ... ... ... cat talk.c ... шығару.
#include
#define READ 0 /*Каналдың оқушы соңының индексі*/
#define WRITE 1 ... ... ... ... phrase = “Stuff this in your pipe and smoke it”;
main()
{
int fd[2], bytesRead;
char message [100]; ... ... ... ... (fd); ... ... құру*/
if (fork() == 0) /*Туынды, жазушы*/
{
close(fd[READ]); /*Қолданылмайтын соңын ... ... phrase, strlen (phrase) + 1); /*NULL ... ... соңын жабу*/
else ... ... ... ... ... жабу*/
bytesRead = read (fd[READ], message, 100);
printf (“Read %d bytes: %s\n”, bytesRead, message); /*Жіберу*/
close (fd[READ]); ... ... ... talk ... ... 37 bytes: Stuff this in your pipe and smoke it
$ _
3 kill() ... жүйелік шақыруды қолдана отырып, үрдіс басқа үрдіске сигнал
жібере алады. ... ... kill() үшін оның аты оның ... ... оның ... ... көптеген сигпалдары үрдісті
аяқтамайды (“өлтірмейді”). Шақыру өзінің тарихи ... ... UNIX ... ... ... ... негізі үрдісті аяқтау
болып табылады.
Синтаксис
int kill (pid_t pid, int ... ... ... sigCode мәнді сигналдарды PID pid арқылы үрдіске
жібереді. kill() жақсы аяқталады, ал сигнал ... ... ... ... ... жіберуші және қабылдаушы үрдістердің бір ғана иесі болса;
• жіберуші үрдіс привилегиялы пайдаланушынікі (root) болса;
kill()-дің жұмысының бірнеше нұсқасы бар:
• Егер pid 0-ге тең ... ... ... тобындағы барлық
үрдіске жіберіледі;
• Егер pid -1-ге тең болса және жіберуші привилегиялы пайдала-нушыға
(root) ... ... ... ... үрдістерге жіберіледі;
• Егер pid -1-ге тең және жіберуші привилегиялы емес пайдалану-шы болса,
сигнал сол жіберген ... ... ... ... ... ... Егер pid теріс және 1-ге тең емес болса, сигнал үрдістер тобын-дағы
барлық үрдістерге жіберіледі;
Егер kill() ... бір ... ... ... онда ол 0-ді
қайтарады, әйтпесе -1-ді қайтарады.
3.1 Сигналды беру үрдісі: kill
Егер үрдісті бітірмей тұрып ... ... ... онда kill ... Korn shell мен C ... ... kill ... бар болса,
Bourn shell оның орнына стандартты kill ... ... ... ... ... ... үрдістің құрылуы мен оны kill командасы арқылы аяқтау
көрсетілген:
$ (sleep 10; echo done) && ... ... ... ... kill 27390 ... ps ... TT STAT TIME ... p3 S 0:00 –sh ... p3 R 0:00 ps
$ ... [ ... ] { ID_үрдіс } +
kill ... ... ... параметрімен нөмірленген үрдістер
тізіміне сигнал жібереді. сигнал_ID сигналдың нөмірі немесе аты ... ... Kill TERM ... ... ол ... кейін үрдіс аяқталады.
Егер өтілетін сигналдың атының тізімін ... ... ... -l ... ... үрдіске беру үшін пайдаланушыға оның иесі немесе
привилегиялы пайдаланушысы болу керек. ... ... ... 9) ... ... мүмкін. Сол себептен, үрдісті кепілдікті аяқтағыңыз
келсе, оған 9 нөмірлі сигналды жіберіңіз. (Мән ... kill ... ... ... ... және ... ... аяқталуы-на мүмкіндік
бермейді, дегенмен көптеген ... TERM ... ... ... kill утилитінде (Korn shell мен C shell енгізілген
командаларына қарама-қарсы) 0-ге pid тең ... ... ... ... өсу ... ... ... идентифи-
каторы мен –l опциясын қолдану көрсетілген:
$ kill –l
HUP INT QUIT ILL TRAP ABRT EMT FRE KILL BUS SEGV SYS PIPE ALRM TERM ... TSTP CONT CHLD TTIN TTOU IO XCPU XFSZ VTALRM PROF WINCH LOST USR1 ... (sleep 10; echo done) ... ... ... kill –KILL 27490 …9 ... сигналмен үрдісті “өлтіру”.
$ _
Келесі мысалда ағымдағы терминалмен байланысты барлық ... sleep 30 & sleep 30 & sleep 30 & ... ... kill 0 ... барлығын
“өлтіру”.
27431 Terminated
27430 Terminated
27429 Terminated
$ _
Kill
Shell-дің kill командасы сигналды көрсетілген тапсырма немесе ... [-l] [ ... ] { ... | ... } ... kill ... ... көрсетілген тапсырма немесе мысалға
жібереді. Үрдіс оның PID нөмірімен жіберіледі. Сигнал анықталған немесе
оның ... ... ... әлде ... ... ... “SIG” приставкасын жою жолымен. Сигнал-
дар тізімін ашу үшін –l опциясы қолданады. Егер ... ... ... ... Егер TERM ... HUP ... ... үрдіске
жіберілген болса, CONT сигналы жіберіледі, ол оны ... kill –l … ... ... сигналдарын шығар.
1) HUP 12) SYS 23) ... INT 13) PIPE 24) ... QUIT 14) ALRM 25) ... ILL 15) TERM 26) ... TRAP 16) USR1 27) ... ABRT 17) USR2 28) ... EMT 18) CHLD 29) ... FRE 19) PWR 30) ... KILL 20) WINCH 31) ... BUS 21) ... SEGV ... man ksh | ul –tdumb > ksh. txt & ... ... жүктеу.
[1] 27160
$ kill -9 %l ... ... ... ... + killed man ksh | ul –tdumb > ksh.txt &
$ man ksh | ul –tdumb > ksh. txt & ... ... 27164
$ kill -KILL 27164 ... ... ... “өлтіру”.
[l] + killed man ksh | ul –tdumb > ksh.txt &
$ ... ... ... ... үрдіс аяқталған кезде, ол өзіне ... SIGCHLD ... ... ... ... өңдеуші орналастырады, себебі сол сигнал-
мен қатнасу үшін және көбнесе ... ... ... кодын алу және оны
“зомби” ... ... үшін wait() ... ... ... ... SIGCHLD ... сигналдарын таң-дай
алады, сол кезде жеңілген үрдіс автоматты түрде зомби болуын аяқтай-ды.
Төменде келтірілген ... SIGCHLD ... ... ... ... ... ... шектеуге мүмкіндік етеді. Бірінші параметр
limit – бұл жұмыс үшін ... ... ... өлше-мі, ал қалған
параметр – бұл команданың өзі. Келесі қадамдарды орындай отырып, программа
жұмыс ... ... ... ... ... ... аяқталған кезде орындала-тын SIGCHLD
сигналының өндірушісін орналастырады.
2. Аталық үрдіс бұталанады, және де команда орындалу үшін ... ... ... ... үрдісінде секунд мөлшері ... Ол ... ... ... үрдісін “өлтіру” үшін SIGCHLD сигналын жібереді.
4. Егер жеңілген үрдіс оның ... ... ... ... ... ... ... онда аталық SIGCHLD өңдеу сигналы орындалып, аталық тез
арада тоқтауын талап ... ... код пен ... ... келтірген:
$ cat limit.c ... ... include
# include
int ... childHandler();
/**************************************************************/
main (args, argv)
int argc;
char* argv[];
{
int pid;
signal (SIGCHLD, childHandler); /* туындыны “өлтіру” өңдеушісін */
/* орнату ... = fork().; /* ... ... (pid == 0) /* ... ... ... (argv[2], &argv[2]); /* команданы орындау */
perror (“limit”); /* ... ... ... ... /* ... ... (argv[1], “%d”, &delay); /* командалық жолдан кідірісті
оқу */
sleep (delay); /* ... ... ... ... ... %d exceeded limit and is being ... ... (pid, SIGINT); /* туынды үрдісті “өлтіру” */
}
}
/**************************************************************/
void childHandler() /* егер ... ... ... ... */
/* бұрын “өлсе”, орындау */
{
int childPid, childStatus;
childPid = wait (&childStatus); /* туындының аяқталу кодын ... ... ... %d ... within %d ... ... delay);
exit (/* жауабы_сәтті */ 0);
}
$ limit 5 ls ... ... ... ... alarm critical handler ... ... ... limit.c
Child 4030 terminated within 5 seconds
$ limit 4 sleep 100 ... ... ... өте ұзақ ... 4032 exceeded limit and is being ... ... ... тоқтатылуы мен жаңаруы
SIGSTOP және SIGCONT сигналдары сәйкесінше ... ... ... ... ... қолдайтын олар UNIX shell-де (көбнесе
shell, Bourne ... ... ... stop, fg және bg ... ... асыру үшін.
Келесіде келтірілген мысалда негізгі программа шексіз циклды және әр
секунд сайын хабар шығарып ... екі ... ... ... ... 3 ... ... содан соң бірінші жайылған үрдісті тоқтатады.
Екінші үрдіс әдеттегідей орындала береді. Келесі 3 ... ... ... үрдісті жаңартады, басқаларын көбірек уақыт тосып, екі ... ... Коды ... cat pulse.c ... ... include
# include ... pid1; int pid2;
pid1 = fork();
if (pid1 == 0) /* бірінші туынды үрдіс */
{
while (1) /* ... цикл ... (“pid1 is ... ... = fork(); /* ... туынды үрдіс */
if (pid2 == 0)
{
while (1) /* шексіз цикл */
{
printf (“pid2 is ... ... ... (pid1, ... /* ... туынды үрдісті тоқтату */
sleep (3);
kill (pid1, SIGCONT); /* ... ... ... ... */
sleep (3);
kill (pid1, SIGINT); /* бірінші туынды үрдісті “өлтіру” */
kill (pid2, SIGINT); /* ... ... ... ... ... pulse ... ... is alive ... де ... 3 ... ... жасайды.
pid2 is alive
pid1 is alive
pid2 is alive
pid1 is alive
pid2 is ... is alive ... ... ... ... ... жұмыс жасап
жатыр.
pid2 is alive
pid2 is alive
pid1 is alive ... ... ... ... is ... is ... is alive
pid1 is alive
pid2 is alive
$ _
KILL ( )
Kill () жүйелік шақыру үрдістер кестесіндегі ID ... ... ... пен ID ... ... ... Мысалы, келесі жол
орындалған кезде
kill (0, SIGINT);
ядро биттік картада әр кесте ... ... SIGINT ... ... ... битті орнатады және оның ID тобының үрдісі мен
ID аяқтау үрдісі тең болады. UNIX бұл ... ... ... және + ... ... ... тарату үшін
қолданады.
Сигналдарды жіберу: kill командасы
kill командасын әдетте үрдістін орындалуын тоқтату үшін ... ... ... кез ... ... ... алады, ал егер көрсетілмесе ол
TERM программаны аяқтау сигналын жібереді. kill ... ... да ... жеке үрдістері үшін), ... да (кез ... ... ... қолдана алады. Оның келесі
синтаксисі болады:
kill [ ... ] ... ...... ... нөмірі немесе сигналдың аты, ал
pid – адрессат-үрдістің идентификациондық нөмірі. Кейбір жүйеде pid ... және ... ... ... ... үрдістерге сигнал жібереді.
kill командасы сигналдың нөмірісіз үрдістің өлетініне ... ... TERM ... ... бұғаттауға және мән бермеуге болады.
kill -9 pid
командасы үрдіс ... ... ... ... 9 ... kill ... үрдістермен ұсталмайды. Kill сигналын ереже бойынша
сіз жойғыңыз келетін үрдіс ... ... ... қалұан кезде жіберу керек.
Кейде үрдістеді kill сигналы арқылы да өлтіре алмайтын жағдайлар да болады.
Мұндай үрдістерді жоюдың ... жолы – reboot ... бір kill ... ... кең қолданылатын тоқтату сигналы
(HUP), сигнал 1. ... ... ... бұл ... ұстап және команда
секілді интерпретациялайды. Көптеген программалар бұл сигналды алған кезде
өзінің конфигуационды файлдарын қайтара оқиды. Қандайда үрдіс ... ... ... ... HUP ... ... жөн, себебі көптеген
программалар HUP-ті: “Сені жақында өлтіруі мүмкін, сол үшін өзіңді ... ...... ... деп түсінеді.
Қорытынды
Бұл курстық жұмысты жасарда мен семестр бойы ... ... ... ... Linux ... ... туралы жан-жақты қарастырдым.
Соның ішінде Linux опеациялық жүйесіндегі Korn shell мен C ... ... мен ... ... ... әр ... ашып
көрсетуге тырыстым. Дегенімен, оның әр қайсысын қысқа-ша ... ... kill ... ... Оның ... қолдануын, синтаксисін,
қызметін, мақсатын және опцияларын көрсетіп, оны программада ... ... ... ... ... ... ал сигналдар үрдістерге асинхронды жағдайлардың пайда бол-ған
туралы жеткізеді. Бір-біріне сигналдарды жіберу үрдістермен жүргізіледі, ол
kill функциясы көмегімен ... ... ... командасын әдетте үрдістін орындалуын тоқтату үшін қолданады. Бұл
команда үрдіске кез келген сигналды жібере алады, ал егер ... ... ... ... ... жібереді. kill командасын қара-пайым
пайдаланушылар да (өздерінің жеке ... ... ... да (кез ... ... ... ... алады.
Қолданылған әдебиеттер
1. Стивенс У. UNIX, взаимодействие процессов. – М.: Питер, 2002
2. Гордеев А.В., Молчанов А.Ю. Системное программное обеспечение. - ... ... ... Г. ... в операционные системы. В 2-х томах. Пер.с англ. – М.:
Мир, 1987
4. Концептуальное ... ... ... ... – СПб: ... ПВО, 1998
5. Клочко В.И. Теория вычислительных процессов и структур. Учебное пособие.
– Краснодар: Издательство КубГТУ, 1999
6. Кейт Хэвиленд, Дайана Грэй и др. ... ... UNIX. ... ... 2000
7. Операционные системы – от РС до РS/2/ ... ... ... ... ... – М.: Мир, ... Олифер В.Г., Олифер Н.А. Сетевые ОС.- СПб.: ... ... ... ... Windows NT и NTFS. Пер.с англ. – М.: Отдел Русская
редакция ... Traiding ltd”, ... Эви ... Гарт ... и др. UNIX. ... системного
администратора. – Киев, 2000
11. Корнеев В.В. Параллельные ... ... ... ... include
# include ... pid1; int ... = ... (pid1 == 0) /* бірінші туынды үрдіс */
{
while (1) /* ... цикл ... (“pid1 is ... (1);
}
}
pid2 = fork(); /* ... ... ... */
if (pid2 == 0)
{
while (1) /* ... цикл ... (“pid2 is ... ... (3);
kill (pid1, SIGSTOP); /* бірінші ... ... ... ... ... (pid1, ... /* бірінші туынды үрдісті жаңарту */
sleep (3);
kill (pid1, SIGINT); /* ... ... ... ... ... (pid2, SIGINT); /* ... ... үрдісті “өлтіру” */
}

Пән: Информатика
Жұмыс түрі: Реферат
Көлемі: 24 бет
Бұл жұмыстың бағасы: 300 теңге









Ұқсас жұмыстар
Тақырыб Бет саны
2 – сынып математика сабақтарында оқытудың тәрбиелік функциясын жүзеге асыру64 бет
Delphi ортасында бір айнымалының функциясын зерттеу әдістемесін жасау18 бет
Linux (Red Hat) операциялық жүйесі16 бет
Linux жүйесі28 бет
Linux операциялық жүйесі10 бет
Linux операциялық жүйесінің пайда болуы26 бет
Linux операциялық жүйесінің функциялары20 бет
Linux операциялық жүйесіндегі pipe() функциясы21 бет
Linux файлдық жүйелеріне жалпы мәлімет4 бет
MATLAB бағдарламасы.Simulink пакеті. Ляпунов функциясына жалпы анықтама.13 бет


Исходниктер
Пәндер
Көмек / Помощь
Арайлым
Біз міндетті түрде жауап береміз!
Мы обязательно ответим!
Жіберу / Отправить


Зарабатывайте вместе с нами

Рахмет!
Хабарлама жіберілді. / Сообщение отправлено.

Сіз үшін аптасына 5 күн жұмыс істейміз.
Жұмыс уақыты 09:00 - 18:00

Мы работаем для Вас 5 дней в неделю.
Время работы 09:00 - 18:00

Email: info@stud.kz

Phone: 777 614 50 20
Жабу / Закрыть

Көмек / Помощь