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

Is single threaded program executing on multiple threads? [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;
}

我假设上述代码是单线程用户级应用程序。程序执行时,尤其是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() 生成一个新进程,该进程在工作完成时被终止。

您可以说总共三个进程是以顺序方式创建的。但是由于进程之间没有共享任何东西 - 它们不是线程。