[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[osx-users:0371] Re: 終了時にシェル・コマンドを実行した
- To: osx-users@xxxxxxxxxx
- Subject: [osx-users:0371] Re: 終了時にシェル・コマンドを実行した
- From: "Kogule, Ryo" <aqua_dabbler@xxxxxxx>
- Date: Sat, 15 Mar 2003 00:19:49 +0900
古暮でございます。
> というわけで(というわけでもないですが)、終了(TERM)シグナルを
> ひたすら待ちつづけて、受け取ったら指定したコマンド(ファイル)を
> 実行して終了するだけのプログラムを作ってみました。
面白い題材ですね。ちょっと機能追加を考えてみました。
On 2003.Mar.12, at 19:51 Asia/Tokyo, Yan wrote:
> 使い方は、termprocを適当な場所(e.g. /hogehage)に置いて、
> コマンドファイル(e.g. termcom)も適当な場所(e.g. /hegehoge)に
> 置いて、/etc/rcの最後のほうで
>
> /hogehage/termproc /hegehoge/termcom &
>
> とやっておくだけです。
親 process の影響を受けない様にする為に daemon 化しちゃった方が良いん
じゃないでしょうか? & で明示的に裏に送る必要もなくなりますし。
ついでに終了時に実行する command へ引数を渡せる様にしてみました。
/hogehage/termproc touch /tmp/bye
というふうに使えます。
# Source が読める事を履違える低劣な site 運用者もいる様ですが,
# 本当の利点はこういうところなんですけどねえ。
--- termproc.c.orig Wed Mar 12 22:42:25 2003
+++ termproc.c Sat Mar 15 00:06:02 2003
@@ -1,24 +1,24 @@
#include <signal.h>
+#include <stdlib.h>
+#include <unistd.h>
-static char fname[80];
+char **Argv;
void termwait(sig)
int sig;
{
- if (fname[0] != '\0')
- system(fname);
+ if (Argv != NULL)
+ execvp(Argv[0], Argv);
exit(0);
}
int main (int argc, const char *argv[])
{
- if (argc > 1) {
- argv++;
- strcpy(fname, *argv);
- }
- else {
- fname[0] = '\0';
- }
+ if (argc > 1)
+ Argv = (char **)++argv;
+ else
+ Argv = NULL;
+ daemon(0,0);
signal(SIGTERM, termwait);
pause();
}
--[PR]------------------------------------------------------------------
\\\ キャリアUPを目指すなら、AOL Career! ///
━━━━━━━━━━━━━━━━━━━━━━━━
■スキルアップ、転職、派遣等最新の求人情報であなたをサポート
今すぐGO=> http://ad.freeml.com/cgi-bin/ad.cgi?id=bGmkm
------------------------------------------------------------------[PR]--
<GMO GROUP> Global Media Online www.gmo.jp