单线程程序是否在多个线程上执行?[C]



如果我执行以下代码,该代码是单线螺纹:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
  char[] cmd1 = "cat /sys/class/thermal/thermal_zone0/temp > temp.txt";
  char[] cmd2 = "cat /sys/class/thermal/thermal_zone2/temp > temp2.txt";
  system(cmd1);
  system(cmd2);
  return 0;
}

i是假设上述代码是一个线程用户级应用程序。当程序执行时,尤其是System()函数时,需要执行Shell命令。因此,当此程序调用两个shell命令函数时,它们是否在两个不同的线程上执行(该程序的线程,另一个由Shell执行的线程)?或者称为System()函数时,操作将控件传递给Shell,然后将其抢占命令并执行命令,然后将操作交给程序线程?

有人可以告诉我上述代码如何在线程级别工作?

system()函数上下文意味着主要过程是在子过程中产生一个子过程,只是立即等待其终止。因此,我们可以认为System()= fork() -> exec() -> waitpid()。在您的情况下:

char[] cmd1 = "cat /sys/class/thermal/thermal_zone0/temp > temp.txt";
char[] cmd2 = "cat /sys/class/thermal/thermal_zone2/temp > temp2.txt";
system(cmd1);
system(cmd2);

主过程将产生新的儿童进程,执行实用程序CMD1,等待CMD1终止。然后,它将产生另一个儿童过程,执行UTILY CMD2,等待CMD2终止。

在此上下文中没有线程级别。线程是过程中执行的单位。一个过程可以包含一个或多个线程。

在Linux上,线程和过程相似 - 它们称为任务。在Linux中,线程只是一个过程,与其他过程共享几件事。system()功能调用是一个阻止一个,您的程序在system()完成工作时等待。system()产生了一个新的过程,该过程在完成工作后被杀死。

您可以说总共以A sequential 方式创建了三个过程。但是由于过程之间什么都没共享 - 它们不是线程。

最新更新