1. 创建第一个QNX进程

任务目标

在QNX Neutrino系统上,用C语言编写一个最小进程程序,通过qcc编译后运行,验证进程能够启动、执行并正常退出,从而理解QNX进程从创建到终止的基本生命周期。

环境与依赖

  • QNX Neutrino 7.0或以上版本(或QNX SDP中的qcc工具链)
  • 目标机或虚拟机已启动QNX系统,并能通过串口/网络访问其shell
  • 无需额外库,仅使用POSIX标准接口

完整代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>

int main(void) {
    pid_t pid = getpid();
    pid_t ppid = getppid();

    printf("QNX process started.\n");
    printf("PID: %ld, PPID: %ld\n", (long)pid, (long)ppid);

    for (int i = 0; i < 3; i++) {
        printf("Running... %d\n", i + 1);
        sleep(1);
    }

    printf("Process exiting normally.\n");
    return 0;
}

编译与运行

  1. 将上述代码保存为first_proc.c。
  2. 在QNX shell中执行编译:
    qcc -o first_proc first_proc.c
  3. 运行程序:
    ./first_proc

验证方法与通过条件

  • 程序输出以QNX process started.开始,随后打印当前进程的PID和父进程PPID。
  • 连续输出3行Running...,每行间隔约1秒,证明进程在活动运行。
  • 最后输出Process exiting normally.,shell提示符返回,说明进程已正常终止。
  • 在另一个终端执行pidin | grep first_proc,在程序运行期间应能看到该进程条目;程序退出后再次执行则无此条目,验证进程生命周期结束。

预期输出

QNX process started.
PID: 12345, PPID: 6789
Running... 1
Running... 2
Running... 3
Process exiting normally.

(PID和PPID数值以实际系统分配为准)

关键说明

  • qcc是QNX的C/C++编译器前端,自动链接QNX系统库,无需额外指定链接参数。
  • 进程生命周期在此例中体现为:main()入口→执行→return 0→内核回收进程资源。若需观察进程在后台运行,可在命令末尾加&,再用pidin查看。
  • 若编译报错找不到头文件,请确认已进入QNX环境(执行source /etc/qnx-env.sh或由IDE自动配置)。