Linuxシェルから実行している子プロセスをフォークするCプログラムがあります。
私の問題は、フォークした後、親プロセスがシェルのバックグラウンドに移動することです。親プロセスがフォアグラウンドに留まることを望みます。
簡単な例を次に示します。
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(void)
{
int i;
for (i = 0; i < 3; i++) {
printf("Before Fork\n");
sleep(1);
}
printf("forking...\n");
pid_t pid = fork();
if (pid) {
// child
printf("Child started and now exiting\n");
exit(EXIT_SUCCESS);
}
// parent
wait(NULL);
for (i = 0; i < 3; i++) {
printf("After Fork\n");
sleep(1);
}
return 0;
}
出力(後でコメントを追加)
Before Fork
Before Fork
Before Fork
forking...
Child started and now exiting
After Fork
gregp@gregp-ubuntu:~/fork_example$ After Fork # <--- User returned to shell
After Fork
fork の直後に、ユーザーがシェル プロンプトに戻り、プログラムがバックグラウンドで実行され続けることに注意してください。私はこれが起こることを望んでいません。プログラムをフォアグラウンドで実行し続けたい。
望ましい出力(後でコメントを追加)
Before Fork
Before Fork
Before Fork
forking...
Child started and now exiting
After Fork
After Fork
After Fork
# Program now exits and user returns to shell
gregp@gregp-ubuntu:~/fork_example$