ubuntu进程与线程实验报告二
时间: 2024-02-27 10:56:35 浏览: 104
很高兴回答你的问题。在这里给出我的实验报告,希望对你有所帮助。
实验名称:Ubuntu进程与线程实验
实验目的:
1. 了解进程和线程的概念。
2. 掌握在Ubuntu操作系统下创建进程和线程的方法。
3. 掌握进程与线程之间的区别和联系。
实验环境:
Ubuntu 18.04 操作系统
实验步骤:
1. 进程的创建与销毁
在Ubuntu系统下,可以使用fork()函数创建一个新的进程。该函数会返回两次,一次在父进程中返回子进程的进程ID,一次在子进程中返回0。下面是一个示例代码:
```
#include <stdio.h>
#include <unistd.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
printf("Error: fork failed.\n");
return 1;
} else if (pid == 0) {
printf("This is child process.\n");
} else {
printf("This is parent process.\n");
}
return 0;
}
```
运行结果如下:
```
This is parent process.
This is child process.
```
可以看到,父进程和子进程都打印了自己的信息。接下来,我们可以使用exit()函数终止进程的运行:
```
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
int main() {
pid_t pid;
pid = fork();
if (pid < 0) {
printf("Error: fork failed.\n");
return 1;
} else if (pid == 0) {
printf("This is child process.\n");
exit(0);
} else {
printf("This is parent process.\n");
wait(NULL);
}
return 0;
}
```
在子进程中使用exit(0)函数,可以使子进程正常终止。在父进程中使用wait()函数,可以等待子进程终止。
2. 线程的创建与销毁
在Ubuntu系统下,可以使用pthread_create()函数创建一个新的线程。该函数需要传入一个指向函数的指针和一个指向函数参数的指针,下面是一个示例代码:
```
#include <stdio.h>
#include <pthread.h>
void* thread_func(void* arg) {
printf("This is a new thread.\n");
pthread_exit(NULL);
}
int main() {
pthread_t tid;
int ret = pthread_create(&tid, NULL, thread_func, NULL);
if (ret != 0) {
printf("Error: pthread_create failed.\n");
return 1;
}
pthread_join(tid, NULL);
return 0;
}
```
运行结果如下:
```
This is a new thread.
```
可以看到,新线程打印了自己的信息。接下来,我们可以使用pthread_exit()函数终止线程的运行:
```
#include <stdio.h>
#include <pthread.h>
void* thread_func(void* arg) {
printf("This is a new thread.\n");
pthread_exit(NULL);
}
int main() {
pthread_t tid;
int ret = pthread_create(&tid, NULL, thread_func, NULL);
if (ret != 0) {
printf("Error: pthread_create failed.\n");
return 1;
}
pthread_join(tid, NULL);
return 0;
}
```
在线程中使用pthread_exit()函数,可以使线程正常终止。在主线程中使用pthread_join()函数,可以等待新线程终止。
3. 进程与线程之间的区别和联系
进程和线程都是操作系统中的执行单元,但是它们有着不同的特点。
进程是操作系统中的一个独立的执行单元,它拥有自己的地址空间、文件描述符、信号处理函数等资源。进程之间的通信需要使用IPC机制,如管道、消息队列、共享内存等。
线程是进程中的一个执行单元,它与其他线程共享进程的地址空间、文件描述符、信号处理函数等资源。线程之间的通信可以直接读写共享内存或者使用线程同步机制,如互斥锁、条件变量等。
总的来说,进程和线程都是操作系统中的基本概念,他们各自有着不同的特点和用途。在实际编程中,我们需要根据具体的需求选择使用进程或者线程。
阅读全文