Tôi đang cố gắng làm điều gì đó hơi lạ ở đây. Tôi cần phải bắt đầu một quá trình, logcat, từ một deamon sẽ chạy ở chế độ nền và in tới thiết bị đầu cuối mà không cần kiểm soát stdin. Nó là dành cho việc ghi nhật ký lý tưởng vì vậy logcat sẽ in các thông điệp tường trình trong khi vẫn cho phép người dùng nhập các lệnh chuẩn và khởi tạo các chương trình từ trình bao. Đây là mã cho daemon tôi có cho đến nay. Chương trình, logcat, bắt đầu và hiển thị các thông điệp tường trình nhưng tôi không thể nhập bất kỳ lệnh nào vào stdin vì nó xuất hiện chương trình đã kiểm soát stdin.Bắt đầu một quá trình trong nền trong Linux với C
int main (int argc, char** argv, char** env)
{
int fd;
if ((fd = open("/dev/console", O_RDWR)) < 0) {
fd = open("/dev/null", O_RDWR);
}
printf("THIS IS A TEST\n");
dup2(1, fd);
dup2(2, fd);
pid_t childpid = fork();
if(childpid == -1) {
perror("Failed to fork, logcat not starting");
return 1;
}
if(childpid == 0) {
//this is the child, exec logcat
setsid();
int execReturn = execl("/system/bin/logcat", "logcat", (char *) 0);
} else {
//this is the parent do nothing
close(fd);
return 0;
}
close(fd);
return 0;
}
Cảm ơn
Cảm ơn bạn rất nhiều vì câu trả lời chuyên sâu của bạn. Vấn đề là stdin như bạn đã đề cập. Tôi đã phải chuyển hướng từ logcat sang stdin, cùng với một số công cụ khác như daemonizing quá trình. Điều này đã giúp tôi tiết kiệm rất nhiều căng thẳng và lo lắng. Cảm ơn một lần nữa tôi thực sự đánh giá cao nó. – Mike