【问题标题】:Does a C program in linux get a PID?linux中的C程序有PID吗?
【发布时间】:2012-10-06 06:30:31
【问题描述】:

我有一个简单的 C 程序,当我使用 ./output 编译和运行它时,它在 Linux 上是否获得 PID? (我认为,每个正在运行的程序都是一个进程,它应该有一个 PID。)

我使用了ps aux 命令,但在那里找不到进程名称。

我记得,当我的控制台应用程序(一个 C 程序)在 Windows 7 上运行时,我能够通过 Volatility 工具获取它的 PID。

#include<stdio.h>

void main()
{
    printf("Hello World!");
}

【问题讨论】:

    标签: c linux process


    【解决方案1】:

    是的,Linux 上每个运行的程序都有一个 PID。

    您的程序只打印"Hello, World!",并且会很快完成,以至于在您运行ps aux 时它已经完成了。

    另外,void main() 应该是 int main(void),并且您应该将 \n 添加到输出字符串的末尾。

    【讨论】:

    • 感谢您的建议。一个后续问题:当这个程序终止时,它的数据(假设有一些全局、静态和局部变量)是否也会从内存中擦除?谢谢。
    • 程序显然不再可以访问它,因为程序不再运行。根据系统的不同,这些位可能仍然存在,但没有简单的方法可以访问它们。或者系统可能会擦除程序使用的内存。虚拟内存的使用使这变得复杂;一个程序中的给定地址与另一个程序中的相同地址不是同一块物理内存。总结:实际上,没有;从技术上讲,我不知道。
    【解决方案2】:

    应该的。只需在程序中 printf getpid() 即可查看。

    【讨论】:

      【解决方案3】:

      或者只是添加一个 sleep 以便您可以找到进程 ID。可能在你眨眼的时候跑了。

      使用此代码并在单独的终端中运行ps

      #include <stdio.h>
      #include <unistd.h>
      
      int main(void)
      {
        printf("Hello World!\n");
        sleep(3600);
        printf("Are you bored yet?\n");
      } 
      

      【讨论】:

        【解决方案4】:

        你可以使用 getpid 来获取它

        int main()
        {
            pid_t pid; 
            printf("Hello World!");
            printf("pid of program is %d" , getpid());   
        }
        

        或者只是使用您的代码并将其置于后台。

        void main()
        {
            printf("Hello World!");
        }
        

        输出:

        [xxxxx@localhost ~]$ ./c1 &
        [1] 3007
        3007 
        

        【讨论】:

          【解决方案5】:

          是的,每个进程在运行时都会获得一个 PID。由于这个 C 程序似乎是一个非常短暂的进程,它可能在您运行 ps aux 命令以获取其 PID 之前完成。尝试调用 getchar()scanf() 来等待用户输入,然后从其他终端运行 ps 命令以查看 PID。

          【讨论】:

          • getch 在 linux 中不存在 :-) ,使用它你需要有 ncurses 库
          • 感谢@AkhilThayyil,更正了使用某些用户输入功能的答案:)
          • ncurses提供的getch()函数与Windows上的getch()函数不同。
          猜你喜欢
          • 1970-01-01
          • 2011-03-30
          • 2021-11-29
          • 2011-07-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-12-17
          • 1970-01-01
          相关资源
          最近更新 更多