execl执行shell命令问题

时间:2022-07-07 08:36:41
我编写ucLinux应用程序时遇到一个问题
ucLinux使用函数execl来执行shell命令时提示出错调用方式如:
if (execl("/bin/sh","sh","-c","ls /usr/bin",(char*)0) == -1)
{
 printf("执行Linux命令:%s 失败,原因:%s : %d\n","ls /usr/bin",strerror(errno),errno);  
}
execl运行成功,但是执行命令ls /usr/bin失败
Linux内核提示
ls: page allocation failure. order:7, mode:0x40d0
Mem-info:
DMA per-cpu:
CPU    0: Hot: hi:    0, btch:   1 usd:   0   Cold: hi:    0, btch:   1 usd:   0
Active:126 inactive:129 dirty:0 writeback:0 unstable:0
 free:254 slab:953 mapped:0 pagetables:0 bounce:0
DMA free:1016kB min:360kB low:448kB high:540kB active:504kB inactive:516kB present:8128kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0
DMA: 12*4kB 7*8kB 9*16kB 2*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 1016kB
Free swap:            0kB
2048 pages of RAM
273 free pages
540 reserved pages
953 slab pages
9 pages shared
0 pages swap cached
Allocation of length 329063 from process 41 failed
DMA per-cpu:
CPU    0: Hot: hi:    0, btch:   1 usd:   0   Cold: hi:    0, btch:   1 usd:   0
Active:126 inactive:129 dirty:0 writeback:0 unstable:0
 free:254 slab:953 mapped:0 pagetables:0 bounce:0
DMA free:1016kB min:360kB low:448kB high:540kB active:504kB inactive:516kB present:8128kB pages_scanned:0 all_unreclaimable? no
lowmem_reserve[]: 0 0
DMA: 12*4kB 7*8kB 9*16kB 2*32kB 1*64kB 1*128kB 0*256kB 1*512kB 0*1024kB 0*2048kB 0*4096kB = 1016kB
Unable to allocate RAM for process text/data, errno 12
Unhandled fault: vector exception (0x000) at 0x00000000
SEGV

18 个解决方案

#1


问题补充:
    不是单单ls命令,是执行所有的shell命令内核都有类似这种对应的提示
    程序中malloc的地方都有free对应,不存在只分配不释放的问题

#2


程序应该没问题
你手工执行ls /usr/bin是否也有同样问题?

#3


手工执行没有问题,就是调用时执行内核提示出错,以前是偶尔出错,现在是每一个命令都出错~~

#4


难道是内核崩溃??但是我重新烧写内核到开发板后执行还是出错~~应该不会是开发板有问题吧~

#5


不懂,手工能执行,那内核应该也是好的啊
会不会开发库有问题..

#6



应该是:


execl("/bin/sh", "sh", "-c", "ls", "/bin/usr", (char *)0);


吧!!

#7



喔。LZ是对的。呵呵。抱歉。

#8


学习学习

#9


我觉得是开发库的问题

#10


开发库的问题什么意思??我的编译环境不对??

#11



LZ要不要用ldd先检查一下链接的库?

呵呵。我对这个帖子还是有点在意,想知道结果。

#12


开发库是什么

#13


引用 11 楼 yutaooo 的回复:
LZ要不要用ldd先检查一下链接的库?

呵呵。我对这个帖子还是有点在意,想知道结果。

该命令在uclinux下不可用,没有这个命令

#14


引用 12 楼 sanba1100 的回复:
开发库是什么

G++

#15


刚又试了几次,发现刚开始几次执行shell命令是可以的,执行几次之后就失败了~~

#16


菜鸟路过,看看,讨点分

#17


我的Linux下执行无错误~~~~~~~

#18


lz 我也遇到这样的问题 跪求你是怎么解决的啊

#1


问题补充:
    不是单单ls命令,是执行所有的shell命令内核都有类似这种对应的提示
    程序中malloc的地方都有free对应,不存在只分配不释放的问题

#2


程序应该没问题
你手工执行ls /usr/bin是否也有同样问题?

#3


手工执行没有问题,就是调用时执行内核提示出错,以前是偶尔出错,现在是每一个命令都出错~~

#4


难道是内核崩溃??但是我重新烧写内核到开发板后执行还是出错~~应该不会是开发板有问题吧~

#5


不懂,手工能执行,那内核应该也是好的啊
会不会开发库有问题..

#6



应该是:


execl("/bin/sh", "sh", "-c", "ls", "/bin/usr", (char *)0);


吧!!

#7



喔。LZ是对的。呵呵。抱歉。

#8


学习学习

#9


我觉得是开发库的问题

#10


开发库的问题什么意思??我的编译环境不对??

#11



LZ要不要用ldd先检查一下链接的库?

呵呵。我对这个帖子还是有点在意,想知道结果。

#12


开发库是什么

#13


引用 11 楼 yutaooo 的回复:
LZ要不要用ldd先检查一下链接的库?

呵呵。我对这个帖子还是有点在意,想知道结果。

该命令在uclinux下不可用,没有这个命令

#14


引用 12 楼 sanba1100 的回复:
开发库是什么

G++

#15


刚又试了几次,发现刚开始几次执行shell命令是可以的,执行几次之后就失败了~~

#16


菜鸟路过,看看,讨点分

#17


我的Linux下执行无错误~~~~~~~

#18


lz 我也遇到这样的问题 跪求你是怎么解决的啊