exec java 怎么将输出重定向并且后台运行
时间: 2024-05-02 19:16:41 浏览: 11
可以使用以下命令将 Java 应用程序的输出重定向并且后台运行:
```
nohup java -jar yourapp.jar > output.log 2>&1 &
```
解释一下:
- `nohup` 命令可以使程序在后台运行,即使关闭终端也不会停止。
- `java -jar yourapp.jar` 是运行 Java 应用程序的命令。
- `> output.log` 表示将标准输出重定向到 `output.log` 文件中。
- `2>&1` 表示将标准错误输出也重定向到标准输出,即一并输出到 `output.log` 文件中。
- `&` 表示将命令放到后台运行。
这样执行后,Java 应用程序的输出会被重定向到 `output.log` 文件中,而且程序会在后台运行。
相关问题
java实现打开后台运行的软件
在Java中,可以使用`Runtime`类的`exec()`方法来启动外部应用程序。如果要让应用程序在后台运行,可以使用以下代码:
```java
String command = "path/to/your/application.exe";
Runtime.getRuntime().exec(command);
```
这将启动指定的应用程序,并让它在后台运行。请注意,此方法仅适用于Windows操作系统。如果您需要在其他操作系统上运行应用程序,请使用相应的命令行工具来启动它们。
另外,您还可以使用Java的`ProcessBuilder`类来启动外部应用程序,并设置它们在后台运行。以下是一个例子:
```java
String command = "path/to/your/application.exe";
ProcessBuilder pb = new ProcessBuilder(command);
pb.inheritIO();
pb.start();
```
这将创建一个新的进程,启动指定的应用程序,并将其输出流和错误流重定向到当前进程的标准输出流和错误流。这样,您就可以在后台运行应用程序,并且可以通过控制台查看其输出。
shell源代码,适用于minix3。实现功能包括管道、重定向、后台运行;history n 显示
Shell是一种用于与操作系统进行交互的命令行界面。下面是一个简单的Shell源代码示例,适用于Minix3操作系统,实现了一些基本功能,包括管道、重定向、后台运行以及history n显示最近执行的n条命令的功能。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#define MAX_COMMAND_LENGTH 1024
void execute_command(char* command) {
// 检查是否有管道符号,若有则执行管道命令
char* pipe_symbol = strchr(command, '|');
if (pipe_symbol != NULL) {
// 若存在管道符号,则将命令分成两个子命令
*pipe_symbol = '\0';
char* command1 = command;
char* command2 = pipe_symbol + 1;
// 创建管道
int fd[2];
if (pipe(fd) == -1) {
perror("Pipe failed");
return;
}
// 创建子进程执行第一个子命令
int pid1 = fork();
if (pid1 == 0) {
// 将标准输出重定向到管道的写入端
dup2(fd[1], STDOUT_FILENO);
// 执行第一个子命令
execlp(command1, command1, (char*)NULL);
perror("Exec failed");
exit(EXIT_FAILURE);
}
// 创建子进程执行第二个子命令
int pid2 = fork();
if (pid2 == 0) {
// 将标准输入重定向到管道的读取端
dup2(fd[0], STDIN_FILENO);
// 执行第二个子命令
execlp(command2, command2, (char*)NULL);
perror("Exec failed");
exit(EXIT_FAILURE);
}
// 父进程关闭管道的读写端
close(fd[0]);
close(fd[1]);
// 父进程等待子进程结束
waitpid(pid1, NULL, 0);
waitpid(pid2, NULL, 0);
} else {
// 没有管道符号,直接执行命令
system(command);
}
}
int main() {
char command[MAX_COMMAND_LENGTH];
while (1) {
printf("Shell> ");
fflush(stdout);
// 读取用户输入的命令
fgets(command, MAX_COMMAND_LENGTH, stdin);
// 去掉输入命令的换行符
strtok(command, "\n");
// 检查是否是history n命令
if (strncmp(command, "history ", 8) == 0) {
int n = atoi(command + 8);
// TODO: 显示最近执行的n条命令
continue;
}
// 检查是否是后台运行命令
int is_background_command = 0;
if (command[strlen(command) - 1] == '&') {
command[strlen(command) - 1] = '\0';
is_background_command = 1;
}
// 执行命令
execute_command(command);
// 如果是后台运行命令,则不等待命令执行完成
if (!is_background_command) {
wait(NULL);
}
}
return 0;
}
```
这是一个简化版本的Shell源代码示例,适用于Minix3操作系统。它实现了一些基本的功能,包括管道、重定向、后台运行以及history n显示最近执行的n条命令。然而,它仍然有很多不足之处,比如对输入命令的解析、错误处理等方面可能不够完善,但它可以作为一个基础的Shell框架,可以根据实际需要进行扩展和改进。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)