このようにシステムコールrshによって起動されたacプログラムがあります
system(" rsh -l $DTT $CTT './script.sh' ");
$DTT と $CTT は、ユーザー名とホスト名の文字列をロードする環境変数です。
cプログラムが正常な場合、rshは正常に動作しますが、デーモンでcプログラムを変換して次に実行すると、プロセスrshはubuntuシステムマネージャーでロックされたままになり、多くのCPUリソースを浪費し、rshは半分で動作します、操作を実行しますが、ブロックされたままになります。
rsh を使用する transform my c プログラムのコードは次のとおりです。
pid_t process_id = 0;
pid_t sid = 0;
//Crea processo figlio
process_id = fork();
// Indica il fallimento della fork()
if (process_id < 0)
{
printf("fork failed!\n");
// ritorna fallimento nello stato di uscita
exit(1);
}
// PROCESSO PADRE. Occore ucciderlo.
if (process_id > 0)
{
printf("process_id of child process %d \n", process_id);
// ritorna successo nello stato di uscita
exit(0);
}
//unmask the file mode
umask(0);
//setta nuova sessione
sid = setsid();
if(sid < 0)
{
// Return failure
exit(1);
}
// Chiude gli sdandard INPUT,OUTPUT e di ERRORE stdin. stdout and stderr
close(STDIN_FILENO);
close(STDOUT_FILENO);
close(STDERR_FILENO);
問題が解決しました!ファイルの標準出力をリダイレクトしても、rsh で問題が発生することはありません。