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;
}
编译与运行
- 将上述代码保存为
first_proc.c。 - 在QNX shell中执行编译:
qcc -o first_proc first_proc.c - 运行程序:
./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自动配置)。