求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (tty
版面规则
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
我们都知道新人的确很菜,也喜欢抱怨,并且带有浓厚的Windows习惯,但既然在这里询问,我们就应该有责任帮助他们解决问题,而不是直接泼冷水、简单的否定或发表对解决问题没有任何帮助的帖子。乐于分享,以人为本,这正是Ubuntu的精神所在。
-
- 帖子: 37
- 注册时间: 2013-03-03 10:45
- 系统: ubuntu
求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (tty
运行的时候,报这个错:Program received signal SIGTTIN, Stopped (tty input).,求帮助,这是怎么回事???
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
这不是后台么?直接kill -CONT PID啊。




◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
-
- 帖子: 37
- 注册时间: 2013-03-03 10:45
- 系统: ubuntu
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
为什么会产生这样的结果啊?求解释!!!! 

- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
你不告诉我我怎么知道?




◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
-
- 帖子: 37
- 注册时间: 2013-03-03 10:45
- 系统: ubuntu
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
是不是贴代码啊
当输入:cd d f
之后就会报这个错
[img]/home/huang/图片/2013-03-17%2010:09:28的屏幕截图.png[/img]
代码: 全选
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
//#define prompt "<<<<"
#define bufsize 50
#define size 50
char buffer[2048];
int version = 1;
char buf[bufsize];
char commandName[50];
char arg1[50];
char arg2[50];
char ptr[50];
//void parse(char *prompt,File *fp);
//void exec(char *commandName,char *arg1,char *arg2);
//void parse2(char *prompt,File *fp);
//void parr(char *prompt,File *fp);
void parse(FILE *fp);
void chaifen();
void exec(char *commandName,char *arg1,char *arg2);
void copy();
void copyOperation (int old,int new);
int main(){
int i;
for (i=0;i<50;i++)
{
commandName[i]='\0';
arg1[i]='\0';
arg2[i]='\0';
ptr[i]='\0';
}
while( 1)
{
int i;
if (getcwd(ptr,size)==NULL)
printf("getcwd failed!\n");
else
printf("%s",ptr);
//输出“$”提示符,等待用户输入命令行;
printf("# ");
parse(stdin);// 命令行; //命令行字符串分析:目标得出待运行程
//序的文件名 commandName,arg1,arg2
if (strcmp(buf,"logout\n")==0)
{
// printf("logout2222");
break;}
else
chaifen();
//if(命令行==logout)
// exit( );
//if((i=fork( )) ==0 )
if ((i=fork())==0)
exec(commandName,arg1,arg2);
else
sleep(22);
}
return 0;
}
//void parse(char *prompt,File *fp)
void parse(FILE *fp)//char *prompt,
{
int i,j;
fflush(stdin);
fgets(buf, bufsize, stdin);
printf("buf= %s",buf);
//fputs(buf,stdout);//fputs(fgets(s,80,stdin),stdout); 检验是不是把buf的内容输出
}
void chaifen()
{
int i,j;
// for (i=0;i<50;i++)
//{
//commandName[i]='\0';
//arg1[i]='\0';
//arg2[i]='\0';
//}
//fflush(stdin);
for (i=0;(buf[i]!=' ')&&(buf[i]!='\n');i++)
{
// printf("11111111\n");
commandName[i]=buf[i];
// flag=1;
}
// printf("2222\n");
commandName[i]='\0';
// printf(" CommandName=%s\n",commandName);
j=0;
for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
{
arg1[j]=buf[i];
j++;
}
arg1[j]='\0';
// printf(" arg1=%s\n",arg1);
j=0;
for (i=i+1;(buf[i]!=' ')&&(buf[i]!='\n');i++)
{
arg2[j]=buf[i];
j++;
}
arg2[j]='\0';
//printf(" arg2=%s\n",arg2);
}
void exec(char * commandName,char *arg1,char *arg2 )
{
if ( (strcmp(commandName,"copy")==0) &&(strcmp(arg1,"file1")==0)&&(strcmp(arg2,"file2")==0) )
copy();
else
printf("PID=%d!\n ",getpid());
}
void copy()
{
int i = 0;
int fdold,fdnew;
fdold = open("file1", O_RDONLY);
if(fdold == -1)
{
printf("can not open file %s\n","file1");
exit(1);
}
fdnew = creat("file2", 0666);
copyOperation (fdold, fdnew);
printf ("This is process %d\n", getpid() );
printf("Copy Done!From %s To %s\n", "file1","file2");
exit(0);
}
void copyOperation (int old,int new)
{
int count;
while ((count=read(old,buffer,sizeof(buffer)))>0)
write(new, buffer, count);
return;
}
之后就会报这个错
[img]/home/huang/图片/2013-03-17%2010:09:28的屏幕截图.png[/img]
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
建议楼主还是自己调试一下,看问题出在哪里吧。




◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
- YeLee
- 论坛版主
- 帖子: 26406
- 注册时间: 2008-08-13 8:48
- 系统: Fundu i64
- 来自: 东海硇州,一双管钥。
- 联系:
Re: 求帮助,运行的时候报这个错:Program received signal SIGTTIN, Stopped (
好吧,昨晚回来晚了点,而且由于太过匆忙,代码未来得及看。趁着今天早上还有点时间,看了一眼,顺便加了点注释。
[c]
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#define bufsize 50
#define size 50
char buffer[2048];
//int version = 1;
char buf[bufsize];
char commandName[50];
char arg1[50];
char arg2[50];
char ptr[50];
void parse(FILE *fp) //char *prompt,
{
//既然都有参数过来了,那就用嘛
fflush(fp);
//建议使用前还是置零一下buf
memset(buf , 0 , sizeof(buf));
fgets(buf, bufsize, fp);
printf("buf= %s", buf);
}
void chaifen()
{
int i, j;
//一些变量在使用前还是处理一下
memset(commandName , 0 , sizeof(commandName));
memset(arg1 , 0 , sizeof(arg1));
memset(arg2 , 0 , sizeof(arg2));
for(i = 0; (buf != ' ') && (buf != '\n'); i++) {
commandName = buf;
}
//传入参数未经检查就乱赋值,不是一个好习惯,容易出现段错误
//虽然scanf可以格式化输入,只是没有数组越界检查不是很推荐
//假如用户的输入是双引号和单引号这些又如何拆分呢
//与其渴望用户遵循输入规则,不如程序员自己检查用户输入
commandName = '\0';
j = 0;
for(i = i + 1; (buf != ' ') && (buf != '\n'); i++) {
arg1[j] = buf;
j++;
}
arg1[j] = '\0';
j = 0;
for(i = i + 1; (buf != ' ') && (buf != '\n'); i++) {
arg2[j] = buf[i];
j++;
}
arg2[j] = '\0';
}
void copyOperation(int old, int new)
{
int count;
while((count = read(old, buffer, sizeof(buffer))) > 0)
write(new, buffer, count);
return;
}
void copy()
{
int fdold, fdnew;
fdold = open("file1", O_RDONLY);
if(fdold == -1) {
printf("can not open file %s\n", "file1");
exit(1);
}
fdnew = creat("file2", 0666);
copyOperation(fdold, fdnew);
printf("This is process %d\n", getpid());
printf("Copy Done!From %s To %s\n", "file1", "file2");
exit(0);
}
void exec(char * commandName, char *arg1, char *arg2)
{
if((strcmp(commandName, "copy") == 0) && \
(strcmp(arg1, "file1") == 0) && (strcmp(arg2, "file2") == 0))
copy();
else
printf("PID=%d!\n", getpid());
}
int main()
{
// int i;
// for (i=0;i<50;i++)
// {
// commandName[i]='\0';
// arg1[i]='\0';
// arg2[i]='\0';
// ptr[i]='\0';
// }
//所以说memset可以减轻负担
memset(commandName , 0 , sizeof(commandName));
while(1) {
int i;
if(getcwd(ptr, size) == NULL)
printf("getcwd failed!\n");
else
printf("\e[32m%s\e[0m", ptr);
//输出“$”提示符,等待用户输入命令行;
printf("\e[31m#\e[0m");
parse(stdin);
if(strcmp(buf, "logout\n") == 0) {
break;
} else
chaifen();
if((i = fork()) == 0)
exec(commandName, arg1, arg2);
else
sleep(22);
}
return 0;
}
[/c]
为了方便阅读,代码的顺序调整了一下,还望楼主恕罪。
另,刚才调试了一下代码,表示仍旧没有出现楼主说到的情况,这点还望楼主能再调试一下,尽量重现之前的问题,毕竟没有重现可能性的bug算不上一个好bug。



[c]
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
#include <signal.h>
#include <sys/wait.h>
#define bufsize 50
#define size 50
char buffer[2048];
//int version = 1;
char buf[bufsize];
char commandName[50];
char arg1[50];
char arg2[50];
char ptr[50];
void parse(FILE *fp) //char *prompt,
{
//既然都有参数过来了,那就用嘛
fflush(fp);
//建议使用前还是置零一下buf
memset(buf , 0 , sizeof(buf));
fgets(buf, bufsize, fp);
printf("buf= %s", buf);
}
void chaifen()
{
int i, j;
//一些变量在使用前还是处理一下
memset(commandName , 0 , sizeof(commandName));
memset(arg1 , 0 , sizeof(arg1));
memset(arg2 , 0 , sizeof(arg2));
for(i = 0; (buf != ' ') && (buf != '\n'); i++) {
commandName = buf;
}
//传入参数未经检查就乱赋值,不是一个好习惯,容易出现段错误
//虽然scanf可以格式化输入,只是没有数组越界检查不是很推荐
//假如用户的输入是双引号和单引号这些又如何拆分呢
//与其渴望用户遵循输入规则,不如程序员自己检查用户输入
commandName = '\0';
j = 0;
for(i = i + 1; (buf != ' ') && (buf != '\n'); i++) {
arg1[j] = buf;
j++;
}
arg1[j] = '\0';
j = 0;
for(i = i + 1; (buf != ' ') && (buf != '\n'); i++) {
arg2[j] = buf[i];
j++;
}
arg2[j] = '\0';
}
void copyOperation(int old, int new)
{
int count;
while((count = read(old, buffer, sizeof(buffer))) > 0)
write(new, buffer, count);
return;
}
void copy()
{
int fdold, fdnew;
fdold = open("file1", O_RDONLY);
if(fdold == -1) {
printf("can not open file %s\n", "file1");
exit(1);
}
fdnew = creat("file2", 0666);
copyOperation(fdold, fdnew);
printf("This is process %d\n", getpid());
printf("Copy Done!From %s To %s\n", "file1", "file2");
exit(0);
}
void exec(char * commandName, char *arg1, char *arg2)
{
if((strcmp(commandName, "copy") == 0) && \
(strcmp(arg1, "file1") == 0) && (strcmp(arg2, "file2") == 0))
copy();
else
printf("PID=%d!\n", getpid());
}
int main()
{
// int i;
// for (i=0;i<50;i++)
// {
// commandName[i]='\0';
// arg1[i]='\0';
// arg2[i]='\0';
// ptr[i]='\0';
// }
//所以说memset可以减轻负担
memset(commandName , 0 , sizeof(commandName));
while(1) {
int i;
if(getcwd(ptr, size) == NULL)
printf("getcwd failed!\n");
else
printf("\e[32m%s\e[0m", ptr);
//输出“$”提示符,等待用户输入命令行;
printf("\e[31m#\e[0m");
parse(stdin);
if(strcmp(buf, "logout\n") == 0) {
break;
} else
chaifen();
if((i = fork()) == 0)
exec(commandName, arg1, arg2);
else
sleep(22);
}
return 0;
}
[/c]
为了方便阅读,代码的顺序调整了一下,还望楼主恕罪。
另,刚才调试了一下代码,表示仍旧没有出现楼主说到的情况,这点还望楼主能再调试一下,尽量重现之前的问题,毕竟没有重现可能性的bug算不上一个好bug。
◎当我站在道德的高度上俯视别人的时候,发现自己是多么渺小。
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关
♥执着但不偏激,反对而不排斥,坚决捍卫矛盾体的存在方式。
★★★天气预报★★★
fcitx-yatable一个可以使用的码表输入法
[教程]几个实例攻克软件编译难关
Gentoo Development Guide
字体相关