ソケットを介して通信する2つのLinuxシステム(デスクトップおよびARMベースの開発ボード)があります。
サーバーが事前定義された特定のメッセージを送信するときに、開発ボードで実行されているクライアントアプリケーションを再起動(またはリセット)したいと思います。 Linuxを再起動(再起動)したくないので、クライアントアプリケーションが自動的に再起動したいと思います。
どうすればいいのかわかりません。
ベストアンサー1
/proc/self/exe
特定のメッセージが受信されたらクライアントを実行させます。実行可能ファイルがファイルシステム内の実際にどこにあるかを知る必要はありません。main()
を再利用してargv
新しいパラメータベクトルを設定できます。
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
char buf[32] = {};
char *exec_argv[] = { argv[0], buf, 0 };
int count = argc > 1 ? atoi(argv[1]) : 0;
printf("Running: %s %d\n", argv[0], count);
snprintf(buf, sizeof(buf), "%d", count+1);
sleep(1);
execv("/proc/self/exe", exec_argv);
/* NOT REACHED */
return 0;
}
これはrestart.c
次のように機能します。
$ gcc restart.c
$ ./a.out 3
Running: ./a.out 3
Running: ./a.out 4
Running: ./a.out 5