こんにちは、E46-M3と申します。
さっそくですが、
あるプログラムから別のアプリケーションを起動させる際
または、終了させる際「ハンドル」を使用しますが、
ハンドルそのものの知識が浅いので
是非わかりやすく教えて頂ければ思います。
また、プロセスハンドルとウインドウハンドルの
違いについても教えて頂ければと思います。
よろしくお願い致します。

A 回答 (2件)

 ハンドルについての解説は、それだけでかなりのスペースが必要です。

ので、簡単に書きます。
 詳細は、WindowsAPIバイブル等の書籍を購入して読んで来下さい。

 プロセスハンドルは、各アプリケーション内部で発生したプロセスが持つハンドルです。親ハンドルは、アプリケーションのプロセスハンドルにもなります。
 ウィンドウハンドルは、各アプリケーションから作成される窓毎に持つハンドルです。メイン画面のハンドルは、アプリケーションのハンドルとなります。

 別のアプリケーションを起動する場合には、プロセスハンドルが取得できます。しかし、Windowsの終了等には、プロセスハンドルではなく、ウィンドウハンドルが必要になります(ヘルプ読んでね)。

 説明の都合上端折っている所があるので、正確に覚える場合には、書籍の購入を強くお薦めします。
    • good
    • 0
この回答へのお礼

適切なアドバイスありがとうございます。
プロセスハンドルとウィンドウハンドルは、
基本的に別物なのですね。
/////////////
書籍って結構高いですよね。
でもあって損はないですからね。

お礼日時:2001/06/04 19:35

「ハンドル」は、何かを扱うときに、その何かにたどり着くためのもの、です。


広い意味でのポインタだと思って良いです。

「プロセスハンドル」は、プロセスに何かしたいとき(例えば、あるプロセスを
終了させたい、とか)、「ウィンドウハンドル」は、ウィンドウに何かをしたい
とき、に使います。

ちょっとややこしいのは、あるプログラムを終了させる場合に、そのプログラムが
ウィンドウを持っている場合には、ウィンドウに対して終了の指示ができると
いうことです。

Windowsでは、ほとんどのものを扱う場合には「ハンドル」を使います。メモリや
フォント等々、すべてハンドルを持っています。

# あまり、うまく説明できてないかな… (^^;
    • good
    • 0
この回答へのお礼

いえいえ。
とても参考になりましたよ。

ハンドルについていろいろと検索してみたのですが、
概念的な説明をしているようなページが見つからなかった
ので、質問してみたのですが、、やはり一筋縄では
いかなそうですね。もう少し勉強してみます。
ありがとうございました!

お礼日時:2001/06/04 19:18

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q上り坂で駐車するときハンドルを切る方向は?

上り坂で駐車するときハンドルを切る方向は、「右」と教科書には書いてあったのですが、この方向では、もし車が坂をバックに下がり始めたときに、中央線方向に出てしまうことはないのでしょうか。
下り坂の時に駐車するとき、ハンドルを「左」に切るというのは、バックに下がったとき、中央線とは反対側に行くので良いというのはわかるのですが…。
教えていただけないでしょうか。

Aベストアンサー

なりません。
平地で良いので試してもらえば分かりますが「ハンドルを右に切った状態でバックすると車体は左に動く」ものなんです。
右に切って前進→右回りに動く
右に切ってバック→左回りに動く
ですから。

Qプロセスのハンドルと識別子

エディットやボタンなどへのアクセスは、ウインドウハンドルを使ってそれらのオブジェクトにアクセスしているんだと考えられますが、
プロセスやスレッドにはハンドルと識別子の両方があるので、その違いが分かりません。
あるスレッドが動いていて、それを止める場合、そのスレッドのハンドルを使うのか識別子を使うのかが想像できるようになりたいのです。
プロセスを終わらせる関数を見つけ、その関数の引数の型を調べるのではなく、ハンドルと識別子の違いを理解して、それを想像する方法を教えてください。

Aベストアンサー

OSを限定しないと正確な説明はできないので、ここではWindowsを仮定します。(他のOSの場合は補足願います。)


グラフィックオブジェクト(エディットやボタンなど)の「ハンドル」と、カーネルオブジェクト(プロセスやスレッド)の「ハンドル」にはいくつか大きな違いがあります。

【グラフィックオブジェクトのハンドルの性質】
・1つのオブジェクトに1つのハンドル番号が割り当てられる
・ハンドル番号の割り当てがシステム全体で重複しない
・どのプロセスからも同じハンドル番号で同じオブジェクトを参照できる

【カーネルオブジェクトのハンドルの性質】
・1つのオブジェクトに複数のハンドル番号を割り当てることができる
・同じハンドル番号でも別のプロセスでは別のオブジェクトを指しているかもしれない
・同じハンドル番号でも別のプロセスでは無効かもしれない


例えば、プロセスAでウィンドウを作成し、そのハンドルが0x15e8だったとします。このとき別のプロセスBでハンドル0x15e8のウィンドウを操作すると、同じウィンドウを操作することになります。

これに対して、プロセスAでスレッドを作成し、そのハンドルが0x2ab0だったとします。このとき別のプロセスBでハンドル2ab0のスレッドを操作しようとしても、それが可能だとは限りません。

プロセスBがプロセスAのハンドルを「継承」しているか、プロセスBがスレッドの「識別子(ID)」を取得し、そこからプロセスB内で有効なハンドルを取得すれば、プロセスAのスレッドを操作することができるようになります。前者の場合、プロセスAの中で使用していたスレッドのハンドルがそのまま使えますが、後者の場合は同じ「プロセスAのスレッド」に対して、異なる値を持つ「プロセスB内で有効なハンドル」を取得することになります。


カーネルオブジェクトのハンドルはプロセスごとに割り当てられるので、システム全体を通じてハンドルを一覧することは通常はできません。しかしプロセスとスレッドに限っては、システム全体を通じての一覧ができないと不便です。そのため、プロセスとスレッドには特別に、システム全体を通じて一意であることが保証されている「識別子」が用意されています。

この「識別子」はグラフィックオブジェクトのハンドルと似た性質があります。

【プロセス識別子・スレッド識別子の性質】
・1つのオブジェクト(プロセスまたはスレッド)に1つの識別子が割り当てられる
・識別子の割り当てがシステム全体で重複しない
・どのプロセスからも同じ識別子で同じオブジェクトを識別できる


なお、識別子はオブジェクトを「識別」する(例えばスレッドAとスレッドBが同じか違うかを判断する)ためには使用できますが、オブジェクトの状態を「参照」・「操作(変更)」する(例えばスレッドAを停止する)ためには使用できません。識別子は「どのオブジェクトであるか」という情報を提供するだけだからです。

それ以上の情報の取得やオブジェクトの状態の操作は、プロセスごとにその参照・操作が許されているかどうかの設定(セキュリティ設定)があり、その設定を確認するためにオブジェクトを「開いて」ハンドルを取得する必要があります。

オブジェクトを開いてハンドルを取得する際には「オブジェクトに対してどういう操作を行うか」を指定します。このときシステムは、指定された操作が許されているかどうかをチェックします。ハンドルが取得できれば、その操作を行う権限があるということになります。


ハンドルと識別子の違いはこんなところです。

OSを限定しないと正確な説明はできないので、ここではWindowsを仮定します。(他のOSの場合は補足願います。)


グラフィックオブジェクト(エディットやボタンなど)の「ハンドル」と、カーネルオブジェクト(プロセスやスレッド)の「ハンドル」にはいくつか大きな違いがあります。

【グラフィックオブジェクトのハンドルの性質】
・1つのオブジェクトに1つのハンドル番号が割り当てられる
・ハンドル番号の割り当てがシステム全体で重複しない
・どのプロセスからも同じハンドル番号で同じオブジェク...続きを読む

Q衝突時に自転車はブレーキ・ハンドルを切る、どっちが先?

衝突時に自転車はブレーキ・ハンドルを切る、どっちが先?

自転車が交差点手前の歩道で信号待ちの歩行者の右手からノーブレーキで衝突しました。
運転者は2.5メートル手前で人を発見しハンドルを右に切ったが、間に合わないで衝突したと主張するのだが、2.5メートルの距離があれば例え時速20キロで走っていたとしても、停止距離は1.8メートルで止まるはず。
また、2.5メートル前でハンドルを右に切ったとしたら、2.5メートル先まで曲がらないで直進する自転車などあるでしょうか?
考えられるのは、運転者が2,5メートル前で人を発見したということが 大うそ ということしかないとおもわれます。
自転車を運転する人にお聞きしたいのですが、2,5メートル先に障害物を見たとき、自分がぶつかると痛いとわかっている場合 ブレーキをかけて停まる・右にハンドルを切る とっさにするのはどちらでしょう。
またこのようなことに関しての統計や参考になる資料などご存知の方、どうかお知恵を貸して下さい。よろしくお願いいたします

Aベストアンサー

こんばんは、nyanngoさん。

もっとも問題なのは、ご質問の意図が不明な事だと思います。

歩道で信号待ちをしている時に自転車に衝突された事故ならば、当然警察に届け出て事故検分を行ったのだと思いますが、警察は人身事故扱いにして処理してくれましたでしょうか。

それとも、大した怪我も無い軽い事故だった場合で、損害が衣服の汚れや破れ、持ち物の破損の様な場合で物損事故として処理したのでしょうか。

ただし、警察には民事不介入の原則が有るので、どちらの過失が何割だとか、被害者に慰謝料をいくら払いなさい、などの判断は何が有ろうと一切しないので特には関係はありませんが。

ご質問のケースでは、加害者の自転車側が何処で被害者を発見したとしても、いつブレーキを掛けたとしても、ハンドルを切ろうと切るまいと、そんな事は過失の割合には一切関係無く。

速度が5キロだろうが50キロだろうが、必死にブレーキを掛けたのか、よそ見をしていてノーブレーキで突っ込んだのか、などの状況も一切関係無くて、過失の割合はどの状況に於いても100対0で自転車側の過失が10割なので問題は無い筈なのですが、何の為の質問なのでしょうか。

なので、ご質問の意図が良く分らないのですが、あえて幾つかの回答をするとすれば下記のようになると思います。

2.5メートル手前で発見したのが嘘なのでは無く、20キロという速度が嘘で30キロとか40キロ以上だったという可能性も有りますよね。

路面が濡れていたり、砂利や泥が溜まっていたという事も考えられます。

自転車に乗っていた人の体重が80キロ100キロ120キロなど、停止距離は質量×速度に比例するので、必ず何メートルで止まれるという保証は無い。(極端な事を言えば、強い追い風や向かい風の影響でも変化します)

更に、ご指摘の20キロで1.8メートルという数値は、単純な制動距離の事なのではないかと思いますが。

時速20キロで走行している場合は、危険を察知してから脳が判断してブレーキか回避かを決め、体が反応してブレーキレバーを握り、実際に車輪に制動力が発生するまでの「空走距離」が4メートル以上発生するので、20キロで走っていて2.5メートル手前で発見したという話が事実だとした場合は、その自転車は発見した障害物(被害者)にノーブレーキでぶつかる計算になると思います。

ハンドルを切って避けると判断した場合にも、ほぼ同等の空走距離のような状態の間が発生すると思いますので、その場合もやはり自転車を運転していた人の気持ちとしては避けたつもりであっても、実際には殆んど回避できずに衝突したと考えられます。

でも、途中でも説明しましたが、避けようと避けまいと、ブレーキを掛けようが掛けまいが、そんな事は無関係で100パーセント相手側の過失なので、何も心配する必要はないという事です。

その場でしっかりと警察に連絡して、正しく事故の検分をしてもらって事故処理をするという、当たり前の事がキチンとされていれば何の問題も有りません。

相手がごねて慰謝料などで揉めたとしても、簡易裁判で相手に支払いを促す判決が出されるだけです。

ただし、交通人身事故にも拘らず、ちゃんと警察を呼んで事故処理をしていなかった場合は、裁判になれば相手は自分の有利なように、いくらでも嘘の証言をする事が可能になってしまうので厄介です。

相手は主張を変えて、速度は10キロ以下で徐行していたが、歩行者が急に自分の直前に飛び出したので避けられずに衝突して転倒した時に怪我をした被害事故だと主張するかも知れません。

目撃証人がいなければ、両者の主張は平行線をたどる事となり、最終的には元々加害者であったはずの相手にとっては有利な和解案か判決が出る事になります。

こんばんは、nyanngoさん。

もっとも問題なのは、ご質問の意図が不明な事だと思います。

歩道で信号待ちをしている時に自転車に衝突された事故ならば、当然警察に届け出て事故検分を行ったのだと思いますが、警察は人身事故扱いにして処理してくれましたでしょうか。

それとも、大した怪我も無い軽い事故だった場合で、損害が衣服の汚れや破れ、持ち物の破損の様な場合で物損事故として処理したのでしょうか。

ただし、警察には民事不介入の原則が有るので、どちらの過失が何割だとか、被害者に慰謝料をいくら...続きを読む

Qプロセスのハンドルを確保

AプログラムからBプログラムを起動するプログラムを作成しています。

AはループでBプログラムを起動するのですが、Aでプロセスの起動数をチェックし、飽きのプロセスハンドルを確保しBプログラム意を起動する際にAで確保したハンドルを使用して起動するような処理をするにはどうしたらいいでしょうか?

例:プロセス最大起動数:5
  Aは10回ループし、Bを起動する。
  Aでプロセスハンドルを5個確保する。
  Bを起動する際に確保したハンドルを1個使用する。
  Bが終了したらハンドルを解放する。
  

Aベストアンサー

>プロセス終了後にハンドル初期化する際はどうしたらいいでしょう
>か?

以下に変更します。

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR nCmdLine,
int lCmdShow)
{
PROCESS_INFORMATION pr;
STARTUPINFOA st;
char buf[50];
HANDLE hProcess[5]={0,0,0,0,0};
HWND hWnd[5]={0,0,0,0,0};

memset(&st,0,sizeof(st));
st.cb=sizeof(st);

for (int j,i=1;i<=10;i++)
{
wsprintf(buf,"%d 回目",i);
switch (MessageBox(0,"処理を選択して下さい\r\rOK:起動\rキャンセル:次のループ",buf,MB_ICONINFORMATION|MB_OKCANCEL))
{
case IDOK:
for (j=0;j<5;j++)
if (!IsWindow(hWnd[j]))
{
CloseHandle(hProcess[j]);
hWnd[j]=0,hProcess[j]=0;
}
for (j=0;j<5;j++)
if (!hWnd[j]) break;
if (j==5) continue;
CreateProcess("c:\\windows\\notepad.exe",0,0,0,0,CREATE_NEW_PROCESS_GROUP,0,0,&st,&pr);
Sleep(1000);//低速CPUでも信頼できるウエイト
hWnd[j]=GetForegroundWindow();
hProcess[j]=pr.hProcess;
i=--i&0xf;
continue;
case IDCANCEL:
continue;
}
}
return 0;
}

>プロセス終了後にハンドル初期化する際はどうしたらいいでしょう
>か?

以下に変更します。

#include <windows.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR nCmdLine,
int lCmdShow)
{
PROCESS_INFORMATION pr;
STARTUPINFOA st;
char buf[50];
HANDLE hProcess[5]={0,0,0,0,0};
HWND hWnd[5]={0,0,0,0,0};

memset(&st,0,sizeof(st));
st.cb=sizeof(st);

for (int j,i=1;i<=10;i++)
{
wsprintf(buf,"%d 回目",i);
switch (MessageBox(0,"処理を...続きを読む

Q左折する前に逆ハンドルを切るのはヘタな運転ですか

縁石の切れ目が狭い所へ左折で入る時に
①ブレーキを踏む
②左ウインカーを付ける。
③車体をセンターラインギリギリの右へ寄せる。
④対向車が来ていない事を確認して、右に車の頭を振りだす
⑤左にハンドルをいっぱいに切る

これをやらないと左タイヤを縁石に乗り上げそうで怖いです。
人から言われて左に寄せてから左折をして、左折中に左タイヤの乗り上げを心配して停車したら追突されそうになりました。

ただ、逆ハンドルを切った事で対向車や追い越しをかけた対向車と接触しそうになった事や、後続のバイクにクラクションを鳴らされた事もあります。

Aベストアンサー

図を後から見ました。この曲方しかないですね 普通に左折したら左擦り縁石乗り上げですね。

Q異なるプロセス間でのイベントハンドルの共有

異なるプロセス間でのイベントハンドルの共有

WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。

(1) プロセスAで「本物」のプロセスハンドルを取得
  DuplicateHandle(
    GetCurrentProcess(),    
    GetCurrentProcess(),    // 疑似ハンドル
    GetCurrentProcess(),
    &RealProcessHandle,     // 本物のハンドル
    0,
    FALSE,
    DUPLICATE_SAME_ACCESS
  );

(2) プロセスAでイベントを作成
  hEvent = CreateEvent( NULL, FALSE, FALSE, NULL );

(3) プロセスBでイベントハンドルを複製
  DuplicateHandle(
    RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル
    hEvent,           // プロセスAが(2)で取得したイベントハンドル
    GetCurrentProcess(),
    &hNewEvent,         // プロセスBで利用するためのイベントハンドル
    0,
    FALSE,
    DUPLICATE_SAME_ACCESS
  );

上記のプログラムを実行すると、(1)と(2)は成功するものの、(3)の時点でエラーになり、
GetLastErrorでは6(ハンドルの異常)が表示されます。
プログラムのどこが悪いのでしょうか?

尚、OpenEventによるイベントハンドル共有は、
イベントに名前をつけなくてはならない問題があり、利用しない方針です。

異なるプロセス間でのイベントハンドルの共有

WIN32 APIのDuplicateHandleを用いて、異なるプロセス間でのイベントハンドルを共有したいのですが、うまく動作しません。(1)~(3)にプログラムの詳細を示します。

(1) プロセスAで「本物」のプロセスハンドルを取得
  DuplicateHandle(
    GetCurrentProcess(),    
    GetCurrentProcess(),    // 疑似ハンドル
    GetCurrentProcess(),
    &RealProcessHandle,     // 本物のハンドル
    0,
    FALSE,
    DU...続きを読む

Aベストアンサー

作成元のプロセスおよび、作成したハンドルに対して
適切なアクセス権を与えていますか?
特にPROCESS_DUP_HANDLEは、NT/2000以降では必須です。

また、関数に指定するハンドルが間違っているような気がします。
第1引数は”プロセスのハンドル”であり、第4引数は”複製する対象のハンドル”です。
提示されたソースではどちらが正しいのかわかりませんが、
もう一度、MSDNを確認し関数仕様を確認された方が良いように思います。
>&RealProcessHandle,     // 本物のハンドル
>RealProcessHandle,     // プロセスAが(1)で取得した本物のハンドル


なお、異なるプロセス間では、名前付き以外で共有する場合、
共有メモリや名前付きパイプなどを使用しなければならないパターンもあり
端から名前付きイベントを作成した方が安全な場合もあるので、
本当に名前付きイベントではダメなのか、再考するほうが良いかも知れません。

参考URL:http://msdn.microsoft.com/en-us/library/ms724251(VS.85).aspx

作成元のプロセスおよび、作成したハンドルに対して
適切なアクセス権を与えていますか?
特にPROCESS_DUP_HANDLEは、NT/2000以降では必須です。

また、関数に指定するハンドルが間違っているような気がします。
第1引数は”プロセスのハンドル”であり、第4引数は”複製する対象のハンドル”です。
提示されたソースではどちらが正しいのかわかりませんが、
もう一度、MSDNを確認し関数仕様を確認された方が良いように思います。
>&RealProcessHandle,     // 本物のハンドル
>RealProcessHandle,     // プ...続きを読む

Qハンドルを切るとき変な音がします

よろしくお願いします。
普通乗用車ですが、ハンドルを切るときゴムをこするようなにぶい音がします。タイヤには異常が見あたりません。
とくに低速で動くときに音が大きいように思われます。
パワステのどこかに異常があるのでしょうか?
現在、金銭的な余裕がないため修理にまわすのをためらっています。
音の原因と緊急に修理する必要があるのかどうかを教えてください。

Aベストアンサー

ブーンとかビューというような音であればパワーステアリング関係から音が出ている可能性が高いと思われます。エンジンを止めた状態で音が出ないようであれば、確実にパワーステアリングと考えてよいでしょう。

パワーステアリング系統から音が出る原因として、駆動用のベルトの劣化や調整不良(この場合はキュルキュルとかキューというような高い音になる場合が多い)または、パワーステアリングフルードの不足(この場合は最初に書いたブーンとかビューというような比較的低い音になり、エンジンの回転を上げると音が高くなります)が主な原因として考えられます。

ベルトの劣化や調整不良(ベルトがパワーステアリング用として独立している場合)の場合はベルトの交換または調整ということになります。ベルトが劣化しているかどうかはベルトのプーリー(ベルトが掛かっている回転部分)にあたる面を見て判断しますが、テカテカに光って(通常はつや消しに見えます)いたり、細かなひびが入っていたりするものは寿命と考えて交換が必要です。パワーステアリングフルードの不足はパワーステアリングフルードのタンク部分で点検しますが、車種により点検方法が異なるためユーザーズマニュアルを参照するか、専門家の点検を受けてください。ベルトの調整も車種によって異なりますので同じです。

また、パワーステアリングフルードを補充する際は必ずメーカー指定のパワーステアリングフルード(よくパワステオイルなどと言いますが、正しくはパワーステアリングフルードと呼び、通常のエンジンオイルなどとはまったく異なる性質のものですので決して指定以外のオイルを入れたりしないでください。)を適量(入れすぎると温度が上がった時に溢れ出す場合がある)補充してください。通常はこのフルードが減ることはないはずですので、漏れがある部分を特定しその部分の修理をしないと再発する可能性が高いでしょう。

詳細な車種(車検証に記載されている年式・型式・原動機型式など)を記載していただければ、もう少し具体的に点検・調整の方法を記載できるかと思います。

ブーンとかビューというような音であればパワーステアリング関係から音が出ている可能性が高いと思われます。エンジンを止めた状態で音が出ないようであれば、確実にパワーステアリングと考えてよいでしょう。

パワーステアリング系統から音が出る原因として、駆動用のベルトの劣化や調整不良(この場合はキュルキュルとかキューというような高い音になる場合が多い)または、パワーステアリングフルードの不足(この場合は最初に書いたブーンとかビューというような比較的低い音になり、エンジンの回転を上げ...続きを読む

Q子プロセスと親プロセス

ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。
自分でもいろいろ調べたのですが、わからないので質問させていただきます。

自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。

というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセスとして10回実行する方法がわからなくて困っております。。。

言語はc言語を使ってもらいたいです。以下に自分のプロセスIDと親のプロセスIDを表示するプログラムを付けときます。

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

int main(){
pid_t pid;
int status;
if((pid=fork())==0)
printf("I am a child with pid=%d. My parent pid is %d.\n",getpid(),getppid());
else{
wait(&status);
exit(EXIT_SUCCESS);
}

ある本を読んでいると、以下のような問いにぶち当たり、プログラムの仕方がよくわからないのです。
自分でもいろいろ調べたのですが、わからないので質問させていただきます。

自分のプロセスIDと親のプロセスIDのプロセスIDを表示するコマンドshowpidを作り、showpidを子プロセスとして10回実行するプログラムを作りなさい。ただし、execを用いてshowpidを10回実行すること。

というものなのですが、自分のプロセスIDと親のプロセスIDの表示方法はわかったのですが、それをコマンドとして作り、子プロセス...続きを読む

Aベストアンサー

showpid.c では単に、getpid() と getppid() の結果を出すだけでいいです。それをコンパイルすればコマンドが出来ます。

メインのプログラムでは、こんな感じで。
for(10回ループ) if(fork()==0) execv(showpidコマンド)

Qバックでハンドルをいっぱいまで切るとき、ギー・・・

 RAV4なんですが、バックするとき、ハンドルをいっぱいまできると、ギーという金属どうしが擦れ合うようないやな音がでます。

 今のところ不快感以外には、困ることはないですが、何かの前兆だといやだなと思いまして、少し気になります。

 原因と直し方がわかる方、お教えください。

Aベストアンサー

トヨタ製のフルタイム4WD車に10年あまり乗ってます。

ご質問のような症状を2度経験しています。

1回目は、ステアリング機構内のゴム製の緩衝材(末端のクッションのようなもの)が擦り切れていたため、というのがディーラーの整備担当の説明でした。

2回目は11年目の車検時で、ステアリング機構そのものの老朽化が原因(これもディーラー側の説明。信じるのみ。)で、中古再生部品(新品はさすがにもったいない。)に丸とっかえ(エンジン脱着込み)でン十万をつぎ込みました。(愛着度には代えられませんでした。まさに愛車です。)

・・・というわけで、日頃の乗り方や経過年数等によって異なると思います。
いずれにしろ、解消するには「修理」しかないと思いますが、不快感を解消する代価と修理費を天秤にかける必要がありますね。

Q子プロセスの状態を親プロセスに渡したい

今、C言語を用いてシェルを作成していて、そこでcpコマンドを実現したいと思っています。その際、子プロセスを生成し、そこでgetcwdやchdirを使用してディレクトリの移動を行うのですが、子プロセスを終了させると親プロセスでは移動前のディレクトリに戻ってしまいます。
子プロセスでディレクトリを移動したときに,親プロセスでも移動された状態にするにはどうすればいいのでしょうか?それとも、この操作は親ディレクトリでしか行えないのでしょうか?
できるだけ詳しく教えていただけるとありがたいです。回答よろしくお願いします。

Aベストアンサー

質問に「cpコマンドを実現したい」と書かれているのは、もしかしてcdコマンドの書き間違いでしょうか。そう考えると、なぜ親プロセスのカレントディレクトリを移動したいのかが納得できます。
この推測が合っていたとして、普通はcdコマンドのために子プロセスを作ることはしません。cdはシェルのビルトインコマンドとして実現されているのが一般的です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング