Linux的进程和线程Word格式.docx

上传人:b****6 文档编号:18234674 上传时间:2022-12-14 格式:DOCX 页数:13 大小:176.29KB
下载 相关 举报
Linux的进程和线程Word格式.docx_第1页
第1页 / 共13页
Linux的进程和线程Word格式.docx_第2页
第2页 / 共13页
Linux的进程和线程Word格式.docx_第3页
第3页 / 共13页
Linux的进程和线程Word格式.docx_第4页
第4页 / 共13页
Linux的进程和线程Word格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

Linux的进程和线程Word格式.docx

《Linux的进程和线程Word格式.docx》由会员分享,可在线阅读,更多相关《Linux的进程和线程Word格式.docx(13页珍藏版)》请在冰豆网上搜索。

Linux的进程和线程Word格式.docx

使用进程/线程控制相关的系统函数

报告内容要求

(1)实现方法和思路

(2)测试及结果

报告正文

•getpid():

获得当前进程ID

•getppid():

获得当前进程的父进程的ID

•getuid():

获得用户ID

•getgid():

获得组ID

源代码:

#include<

stdio.h>

unistd.h>

sys/types.h>

intmain(){

pid_tmyPid;

pid_tmyParentPid;

gid_tmyGid;

uid_tmyUid;

myPid=getpid();

myParentPid=getppid();

myGid=getgid();

myUid=getuid();

printf("

myprocessidis%d\n"

myPid);

myparentisprocessidis%d\n"

myParentPid);

mygroupidis%d\n"

myGid);

myuseridis%d\n"

myUid);

return0;

}

运行结果;

API函数

用途

fork

创建一个新的子进程

wait

将进程挂起直到子进程退出

signal

注册一个新的信号句柄

pause

将进程挂起直到捕获到信号

kill

向某个指定的进程发出信号

exit

正常中止当前进程

Wait函数

pid=wait(&

status);

If(WIFEXITED(status)){

printf(“Childexitednormallywithstatus%d\n”,WEXITSTATUS(status));

}elseif(WIFSIGNALED(status)){

printf(“Childexitedbysignalwithstatus%d\n”,WTERMSIG(status));

errno.h>

pid_tret;

intstatus,i;

introle=-1;

ret=fork();

if(ret>

0){

printf("

Parent:

Thistheparentprocess(pid%d)\n"

getpid());

for(i=0;

i<

6;

i++){

printf("

Atcount%d\n"

i);

sleep(3);

}

ret=wait(&

status);

//防止僵尸进程的产生

role=0;

else

if(ret==0){

Child:

Thisthechildprocess(pid%d)\n"

for(i=0;

printf("

Chile:

i);

sleep

(1);

}

role=1;

}

else{

Errortryingtofork()(%d)\n"

errno);

%s:

Exiting...\n"

((role==0)?

"

Parent"

:

Child"

));

return0;

运行结果:

signal函数

信号

说明

SIGHUP

挂起

SIGINT

键盘中断

SIGKILL

Kill信号

SIGUSR1

用户自定义信号

SIGUSR2

SIGPIPE

终止管道

SIGTERM

终止信号

signal.h>

voidcatch_ctlc(intsig_num){

CaughtControl-C\n"

);

fflush(stdout);

//清除标准输出的缓存区

signal(SIGINT,catch_ctlc);

Goahead,makemyday.\n"

pause();

•pause函数

–pause函数会把进程挂起,直到接收到信号。

在接收到以后,调用进程从pause中返回,继续进行。

如果进程捕获的信号已经注册了信号句柄,那么pause函数会在信号句柄被调用并返回之后才返回。

–pause原型:

•头文件<

•intpause(void);

pid

>

信号发送到由pid指定的进程

信号发送到与调用进程同组的所有进程

-1

信号发送到所有进程(init进程除外)

<

信号发送到由pid的绝对值指定的进程组中的所有进程

sys/wait.h>

voidusr1_handler(intsig_num){

Parent(%d)gottheSIGUSR1\n"

getpid());

intstatus;

if(ret>

Thisistheparentprocess(pid%d)\n"

getpid());

signal(SIGUSR1,usr1_handler);

role=0;

pause();

Awaitingchildexit\n"

ret=wait(&

}

else{

if(ret==0){

Thisisthechildprocess(pid%d)\n"

sleep

(1);

SendingSIGUSR1topid%d\n"

getppid());

kill(getppid(),SIGUSR1);

sleep

(2);

}else{

Exiting…\n"

((role==0)?

"

:

•exit函数

–终止调用进程。

传入exit的参数会返回给父进程,为wait或waitpid调用提供所需要的状态信息。

–exit原型:

•voidexit(intstatus);

–进程调用exit时还会向父进程发出SIGCHLD信号,释放当前进程占用的资源。

–这个函数调用十分重要,因为他会向Shell坏境表明状态时成功还是失败。

•线程函数

–头文件<

pthread.h>

–创建线程原型

•intpthread_create(pthread_t*thread,pthread_attr_t*attr,void*(*start_routine)(void*),void*arg);

•第一个参数为指向线程标示符的指针。

•第二个参数用来设置线程属性。

•第三个参数是线程运行函数的起始地址。

•最后一个参数是运行函数的参数。

•若成功则返回0,若失败则返回出错编号。

–终止线程原型

–intpthread_exit(void*retval);

stdlib.h>

string.h>

void*myThread(void*arg){

Threadran\n"

pthread_exit(arg);

intmain()

{

intret;

pthread_tmythread;

ret=pthread_create(&

mythread,NULL,myThread,NULL);

if(ret!

=0){

Cannotcreatepthread(%s)\n"

strerror(errno));

exit(-1);

程序无输出内容

修改代码:

=1){

11111111\n"

•线程管理

–pthread_tpthread_self(void);

//获得自己的线程描述符

void*myThread(void*arg)

pthread_tpt;

pt=pthread_self();

Thread%xran!

\n"

(int)pt);

pthread_exit(NULL);

•intpthread_join(pthread_tth,void**thread_return);

•参数th是想要加入的线程

•参数thread_return存储线程完成后的返回值,可以为NULL,表明不捕获线程的返回状态。

•返回值,0代表成功,非0代表失败的编号。

源代码;

Thread%dstarted\n"

(int)arg);

#defineMAX_THREADS5

intret,i,status;

pthread_tthreadIds[MAX_THREADS];

for(i=0;

i<

MAX_THREADS;

i++){

ret=pthread_create(&

threadIds[i],NULL,myThread,(void*)i);

if(ret!

=0){

Errorcreatingthread%d\n"

(void*)i);

ret=pthread_join(threadIds[i],(void**)&

Errorjoiningthread%d\n"

(void*)i);

Status=%d\n"

status);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 判决书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1